From 2650e383350e5d2a7bd3e6be27c73d5dcdfd0efa Mon Sep 17 00:00:00 2001 From: Michael Friendly Date: Sun, 28 Apr 2024 17:28:56 -0400 Subject: [PATCH] Big5 examples --- DESCRIPTION | 3 +- R/datasets.R | 33 +++++-- .../fig/manova-addhealth-heplot-1.png | Bin 6993 -> 7016 bytes docs/pkgdown.yml | 2 +- docs/reference/AddHealth-1.png | Bin 49586 -> 49631 bytes docs/reference/AddHealth-2.png | Bin 12433 -> 50030 bytes docs/reference/AddHealth.html | 73 ++++++++++++--- docs/reference/Adopted.html | 5 + docs/reference/Iwasaki_Big_Five-2.png | Bin 69797 -> 70342 bytes docs/reference/Iwasaki_Big_Five-3.png | Bin 272336 -> 272698 bytes docs/reference/Iwasaki_Big_Five-4.png | Bin 0 -> 63143 bytes docs/reference/Iwasaki_Big_Five.html | 88 ++++++++++++++++-- docs/reference/Parenting-4.png | Bin 57868 -> 58326 bytes docs/reference/WeightLoss.html | 2 +- docs/reference/ellipse3d.axes.html | 6 +- docs/reference/heplot-4.png | Bin 60169 -> 60152 bytes docs/reference/index.html | 2 +- docs/reference/interpPlot.html | 4 +- docs/search.json | 2 +- man/AddHealth.Rd | 37 +++++++- man/Iwasaki_Big_Five.Rd | 30 ++++-- vignettes/fig/manova-addhealth-heplot-1.png | Bin 6993 -> 7016 bytes 22 files changed, 240 insertions(+), 47 deletions(-) create mode 100644 docs/reference/Iwasaki_Big_Five-4.png diff --git a/DESCRIPTION b/DESCRIPTION index 74d8037d..0637f3f5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -53,7 +53,8 @@ Suggests: dplyr, tidyr, ggplot2, - bookdown + bookdown, + patchwork LazyLoad: yes LazyData: yes BugReports: https://github.com/friendly/heplots/issues diff --git a/R/datasets.R b/R/datasets.R index a70a8702..fb5522b9 100644 --- a/R/datasets.R +++ b/R/datasets.R @@ -679,30 +679,47 @@ NULL #' @examples #' #' data(Iwasaki_Big_Five) +#' # use Helmert contrasts for groups +#' contrasts(Iwasaki_Big_Five$Group) <- +#' matrix(c(2, -1, -1, +#' 0, -1, 1), ncol=2) +#' #' str(Iwasaki_Big_Five) #' -#' mod <- lm(cbind(N, E, O, A, C) ~ Group, data=Iwasaki_Big_Five) +#' Big5.mod <- lm(cbind(N, E, O, A, C) ~ Group, data=Iwasaki_Big_Five) +#' coef(Big5.mod) +#' +#' car::Anova(Big5.mod) #' -#' car::Anova(mod) +#' # test contrasts +#' car::linearHypothesis(Big5.mod, "Group1", title = "Eur vs Asian") +#' car::linearHypothesis(Big5.mod, "Group2", title = "Asian: Amer vs Inter") #' #' # heplots -#' labs <- c("Neuroticism", "Extraversion", "Openness", "Agreeableness", "Consientiousness" ) +#' labs <- c("Neuroticism", "Extraversion", "Openness", "Agreeableness", "Conscientiousness" ) #' -#' heplot(mod, +#' heplot(Big5.mod, #' fill = TRUE, fill.alpha = 0.2, #' cex.lab = 1.5, #' xlab = labs[1], ylab = labs[2]) #' -#' heplot(mod, variables = c(2,5), +#' heplot(Big5.mod, variables = c(2,5), #' fill = TRUE, fill.alpha = 0.2, #' cex.lab = 1.5, #' xlab = labs[2], ylab = labs[5]) #' -#' pairs(mod, +#' pairs(Big5.mod, #' fill = TRUE, fill.alpha = 0.2, var.labels = labs) #' -#' -#' +#' +#' # canonical discriminant analysis +#' if (require(candisc)) { +#' library(candisc) +#' Big5.can <- candisc(Big5.mod) +#' Big5.can +#' heplot(Big5.can, fill = TRUE, fill.alpha = 0.1) +#' } + NULL diff --git a/docs/articles/fig/manova-addhealth-heplot-1.png b/docs/articles/fig/manova-addhealth-heplot-1.png index 439751afb491920d40969f8028bc7941fb3889c2..8265e52d195b0c263dd3bfc0335ea78914b41df5 100644 GIT binary patch delta 6519 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 NYGi(?$N=~Be*nyJ+y4Ln delta 6496 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 J>j|eG0 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 Dr35UB literal 49586 zcmeGE_dna;|38i!MO&*&wXr&N*d_L8tE#P8E7S@eC@~ruu}4+4)$n*cw5VAfR!FFw z7(qp;)e@m3p(!c|YQ&7sJ?*2<*B|ix{`k)2(#9p6`#HDUx!ta}>-BaHPb|%ih4+K@ zb8&GA-@I|nii?Xcl#7ekeJ?-o$!J>sBJjrVZen~5cn4k^hWHrZZQs2c4#8YpQi+^@ z+$obwo?KifxNcs%ViTG@M?q%zdpomsS^C9i4jj70weP@FwHc|~S8ngw!_Cci;kEsR z{krbPw?AMO4gFsIym9-VWc{m04p@div3mRDzU3{RlYd|RcZ=0QO*9p;Uh91MQZHg^ z6^B90>s2zVhmd^^a;Y103r!I2Ukmzw|NTD?{67!;|Ly@oP=-8?Yb_g#mUfY<{Bf1@ zMEklv8;g?OJNHk1Vk{bo6LOaq8RAEs_i(kE@x1VPRhGcv%1AIv!N@m1v$@x=I2t>&V`S^7Ig3` zxH~M}4AJvyC!dopXQ$)uj&CpuavBOXa!MuwNM_!%?E7o$-dQeZIR<{3yJTjd7kzy- zyCCm?fXL@+eEHUz9!Uf7xmX3$#3m`tP%bWb@(yP2Mii^(wK)C@Ub@- zbw)?Q0#XfG1jz=+g%0nOyrKZR9Y;jV(^b(tz33XB^{pr1wPjbc=^s0DbF(sE$1ZVJ zYk$dLIKeDl0CyjeI+pxv*NlmsK=Dz8x^S8XT{v#G zTiSy9Fp4wjoEW6k#W89pn;uB3a`@ZXoPb}|cg(SI_C>AAlm-m1IH!k6YDMTyADGoX z#`4{iN$9zcHlxY_LkR&ZW~Am`t+gmK)$CmgE@;?i4=}eaDIUF56)wJDlF8pt>l=PB z;JbNcN0`!F&*B@>KuMdrn`;bpB}aBQ|CiCDZ!)Q+(b5)JX}g?S#3X@=C{%2Sm_R@r zVo)PE3p-=~ax5LK>P45qJpl(4)@qdPwkIia0vnpBg$s`s_qr*eU{IcMNu#GSt0`GP z5qH48&&{mR?U-4iZQbZak6ca1-KRsjT@zo;499o2w7dr7DAGJGzyo5FaCcUVr$j>n z-vh&QV$hXi|_yYxzA_O)|m!^IF@_Ym>mz*?B4oo!C?=@A~w86 z5<;ok+$^9pLIT6{W$bbsb|97Y z5C}OZcv}OqTjNP0aQ_CF#p0={7DMpaWHc4B(TA%W*=UPOAs+nz^Xj#+y1Vqat)6bkolxvul zoVL>~#N27j-^6Kk&>F(GhF9o;Hx za||z1L`~JHVV>Vkt9uN$N8w4KZm7ON%}QeP;CepDxQ7^7N~{MgL6nm7P!hze<_^lfM+1{csf4!TBU+s-ycpv1}Rb913exs7S@ z4aHwIi-}4@p_J0x0a&&b-3_c5b#Loy2+LPnxGiE-b1cdT;e>ed5YH7H7BR5xBL_amcD<(V5+AUyGbc{*{1smtCo|R-X0z@5R<~m zR%rCEWDF^ScY=2Dr#?nrK?P>>;gF?EUq@KYYP0>6^W%E3we?nz1{S^pG5}Ltd)DfA z?F&ikouJxM_$r8;gFW-O^K5uuF?`m6f-G4o7-2z@9nOwRZTW6D zi+NB#S5>Zm1!HuC5gi?NrMvY#I~%U@=WGJ+vY{-+qzkFwy`gUV_Hj0PIA8IL|5h8i zG;eTyl^5qg77R5;L8=)mdp%rHqJ6|{NBU3Lpjz<~Qf>`NwiQ!b=M!Em^+Y z3!-KAyIZh_oyJ4!iDGn2V>rc;N$infumcgR?aw>;_cWA0{1xVNm+3#{u6`27s0LWk z6$B10Qr%HI*~+t3QGHdxNXplMO7|F+Hk2Y}SL!$&IA5_4ixb%!+Hnxv`?72+h15pD zChOJAs0qIznhas12K4GS;wj>4IgaT$CImr~8=RCSh^R?dMW@dh5u-=1>}imoe23+J z#Zj`-RJN~{hwW*|8V9Jw zuhij<{Pc8sVFWtoI6XE!0^a!9l71-}gRyjO-X!`?3il-ILKpoZx-l$%9X1&;LsTzShBOP{Q5<89RH(kR zUT*UnKM>#MmY$&!&99>>(Qh=4)m^dFO-8$XNtpN^#Jo?Ck0<2!O2nAS3O7&^_k)Fs^3ps1*$vaAu2KXCIAc)^Yq06=MtLo z7BR8J07F%dV9#V`Ye)bO3Ry`Qp*I0febkUxRv9p9b11#E^E!o)HCe>iwPR%kZ;L`= zDgdNAbm$j83>KSB|EpI(ybad!&Z)?{N3UX15+;~5JJF&}KG-w8==SAK?pdk}#dmGn zs*D!b;1arnVc@;{u=Y{+fB_R1&3KuqQ<5=B41Y(6h&(nbNs+TvPyu_bg}HF4N?VQL zhjdDC`*NP+xv?_b($i@HFD)PAA%bU z8Hsahvp6^z4Znj@am>9&TiPYWEy%Nt7;pgoHB%gG#nOX}^!)>-R=9T?`;Ije!7!(4VvcVE zw0*PE*D36UIC7qmWVXwu-POY5sNuU8=Y0DD!liZZ0hqh|iv*O%qvVFx$1leHU{AJz znYeGWdCs0P!Fw8P>04y2UiPF4Sj4fSFUHZsHN9kM6R{TTg~FG~EZU(=21AD=5m9f6 zB+=pZ+#YcTGp}UAYIZkrnD_sn<{o_!#41^81r?GtYl$$}_IT;1)h@XQy#m%p~LaoG}23HE1 zOkS@BVY3j7TnJF3a$V@j1O4@x=DQoCJpjXLno$$7Dq_^zzVNeU>c&yy&!up6%1@iEKvcrZ9EW$#Nt}U109#PqZ}PbBKO}E#Es36Gy;^@ zR7v2>kU2K}D4CC-{<-BhzL`6HezEm!=Dq+r8Nca=dvKesFzQIZs#m^&N4Q!#yQ_G< z|Lgu@>+gIkH$;hJ_J-|xs*5gE`#O~o=Y4hEjOrqok~vMEn2QXHOoQR575A>cp6vU- zY5*jsOVg?E&ajP-YU`A0^HS=_b_>%bCo#kD+&E=Vq7sgiaj`jWLFR~QkVdJrWt2C9 z!YF5)CZPdFfGz6WNGb^uq~OBo*&e%ST-0i3nVdju&W&G;V@_Ta#txu(+Zf9O-Z%-! zhs(b{Cs2cJR%6gxJz8wz5(CGUo<3h@P??hcKJ*)DDoQqymICZyp# z22xsMs!(l|T1Yxtb|2EMV}Ro)uJQvOR#Fh>0&TaN(zWe%MkzzJa&kZ}cfqx{v{Q4O zE0r-_Ld&RpRcMn^96}fV4kiE2e!mixV)IgrqqBESq_eBUcy9kx6mBycR9VhimMN3S zv5~=VWRFs@;Y?W)x1Z{7GS<#13Z#USOaxAOuyI9QJlJN3d=s&p%6OL5tHN$z$dd52 zb&AlW-{3!_CQA~--PK^Sr_a@%W(KZ&VMs5Fu+tg2q~nfuBIRYjA=nmWVygj=E=svz z{20Av@s(?dIodo=p|I@ddIBSZ@w0OBgZA!+%}xoDj4QmUO&7CCDj4_~;%)|{fypll z7pr$y^0V59M$*&C&7MR3W{Z=ID7myDjSM$AGi&Y+F+3uD5T_Krc0x6b=&n^%F0;OFP*E+ zVJ@*})sxWy)G9evT4e`XvQ>oU*jOJ9Tg`JGM&WY?j!U}ixUJHIlXqtrqM7`j0vXwm z#&TjuW)o&7z?EJD4r|MQv0pwjmQ(HR4|!MtV#pAIFK}b7;?|d^qF?*`*hp&vG0dCp z{Xn?*rDI)eDbU^}WRZ(1t-sUJx8XgG{xp#7hv?h*#2a$zS1^UK}n2x?bpBO5_gU5a+1b#EEU}B|ZvrG}RNPR;T^ZnT@?%_%hIr&Rnhdfp(#(Xy7 zrKBnnlY7h9jXrSq~v=u+q?Q5$YK&|##J#FSX+Kymcq>UzrJ&aR0^K0bMzf4Qe z8p1)%)k)$%k`=Qxkh?#7GqWpwJOePN(cU&RgXwh{bZ*Vf4*h%Dk61P`U*AUY3ZD8k zwx%<~<{Z*3BO+0R{phZ@Ef%KDnwu@DC4GNpCI_F*9;~9Gd$rhhW`(K4rnCqGxsNiH z)xqs}`B#Sew^b6miy!8EMI`D8;z$D}D_I{ZXraVFQYL z@3Xd;jI+Q#_4sY8(+&iTRfTVI(;|b-sI`pFeiU1Oug)x!6lJe#@G+5gldUi7orRVI}YvigRCf)~2!o zpv_1dB{aJ@+|aD|>-OeR=I@N2UdQ(ll|E`VY>qO%^V)6SHKW$-tp1rl;)`a9k9~c! z2}?r6o!+M*9PH|nW0h(V5FMpM6wcxwUe+v|$^IZSh6|cn`%rLY=axlTr>gjEAufE! zXjZiRC=E`Dq-oBIQ0AMOXK2`Ed8OiH2h*46<1~C% z^F(uR0W~(~`-mAf|Nlf$tiNhxyE@TzjSC8;K)U`s%(SPKxi`s_Aqi$$(?Z zw}uOXe=<+d`Oyzqc}4JcBM3hlXdOLhTuhb#(s%A4kiLa8Rf0%N0L>_{ygFAflPWns zSvffmu7}E%jKwLsHonGv&Zak4&j^1H$$&?$zGe)I(Y9|P@-nyk+J7uG&bbS+mW)SB)9SzS!fGCXRSo{?EaO40J1i;{j~4T zM|?;25EMN*Qa{!Z0H&oVaIQ6dB|al$Vhn^WSyBZDXwI%vlA=pD3f z(1Oz>ZEGe8Bcu*}%5Q&_6J4=Mo=%=2@m1DdSLPe?nTfFNo2Ug0yx6GuDWCTHaJyvz zya6ublIT#~+8k}25W~_K()9gIY5~Mn7U766rvRQt-5k(zTTpQfP@jG@t(GIRHc9$a z!Xp3WXOv*_t&7wQ-W?RHEup^mB>9!VlL~f;={nGM7&>C`d-gnbUo6F(Qx@WTj5B>%;2@(3OI#RSF90PfY}(EpNM%$2q>1fT{m=jpr-7zRgUq*$g!6{HUj9#* z7A()`Z=aYRXnaMS_1*SE%_?q+%_(=-DER{#mYsAVSoK+6MvkCBu1qtD+UO(w>3=$K z?uv&MP*0-kiK8N~O<1KsfG+ieAoeTh;W&&#&QN4NbAu#&)OyP6Sn9||<=3#EF-M)H zoJ;}s_RIg!6y-eTQJmv4a<-`e2N0w&c|Z#nVuCQ)5PC}zMnohoRy^%*PT?4C?=HkA z$da%cK#YDEQ8x*Ybf5=9w7i>~=y>3vl0aR+Q(t&}3fP=fI$r059QyrjbCd#R3-o^R?VVvopU*Uaa1@Wpvy^mR_!X zRLF}}SM7&UKu@YXAC6*BNl_(^J@ucrviMV!%BYs9%e6&yl<(z?PSWWq$z4^_0$BJ_ z$Ui`eJ!9meOC$Xew9Lrx2pA7EMx1FU|LGSKEN?@>NbB{WK%K|tl-lkZl{{uky%WNB zc~@$?4A@+qXIZ56anLk5aH#)nN5I?o^mix58_#p9Y&kD#c5wY2XgB&mK2yS5=3VpV zYqaatT0eGklz~l7RmP>-wv55`&meDXP;!oohd4z|r0G#C@^C22dzR9?nZal3ZyW@O~}cZ2Ip_teJgpz-FdP zMHv=IO6b=MVQ)aqc65X3xi3Ie!+dq$6JLn$>`xm6`rF``4rYo{LHE2m#*yv}%SOi7 z(2I;9dq)9+Y~ty<`cZK^VReGBDdAUX%|kWtT`o)y-Kl8;)EzVhlnT-)TlxT6$Wk5D zYbK(7bxVmajsg!JCfmvYZaF;N_=KXU%!JUpZF?J4VPi1>TBsjdeE%Htxk@5rSE=09 zFTA#&H1|9fY31CA8f&Sw|mJ-?7)kz}hu4w1`tLdZ`Z_T}phC6wPPCT;sHP zj0Y?lnFr}b4oIf&^f(^o6!=-JRsHbd`zjG^G+rWS9Ak?y^gtT~WU zF`(5ulmOH@1X*}3Y$Bnc;bi(UNjSa+L&FO=hZh+TB zI7we`x?0k-mj3z|xWp3?Fx}{!zvl>(CSXAPvxe%vzedxH0K8EL@Ft7YlwgB9{p^kJ zwijv{qGjBNUb45oM1brI9eE*3GW^AMBEHlyOjxl833ixA#MF&GS<~(L4 z5^&S%IkhWnZA5K13mj9+q-iwzXrcm(mWIH+qbcONWdMexfFAtsre4HQ-8IzKVCWT8 z<@8>JQqfWuNVG?|xTedEv`Yq*X`gz|oxh2|S;%26Z`3ji>nqv(Xh|o-BjGog0WRK%FQiHi1$~mnOlz^l1_h z)#!(3PmL#>mPNqsl0V6bMfpZJ31nbR9|TrC;H%q6tR-pseI_k%LrV1f0SEd6h49ib2xch- zmQ8joS~?JDLpXWx&%9Qkb3>t_s2BiQcC1j%7&r@LtO%_7TNYq7p!~nNcRBF`WgPtQn55l$ZZGy2Q1^jyUGTq}Bm)>TR{tl{m9)7uWt@b8~F<^LvP9Tl70^61P3fvfnfCq0LxM0)>H3~YZNaP zfO}UfVY;%*#%*^0^LVlf#)S?CQw_X}wvs^x29#v~kn|~0geyd_Z&-@#KrGS2jd zU3XMoiCdHV@SQ*8V>pEV7=*+wHB4neSixX+9nn8nwb-cczl^O0rY62U=_{UPOG^VZM8GL0=epdYRl?< z7cm7Q6O4Vw{6E{aN}v7{rV3z;9bFvOfCOCT;!5v;IeC44vEat?=dcFb4n@G_>H)U& zK`^iY*Z?vNoNfFjPQ&-MUMWD_lb`JwIvL7j=W9-!VRm|_;RojCfNv>Uzep3Q?ymV zC;^_JaSRYG?-7_JAeaFivCrmD(@yg){USITL&Q&KKbSyqPNIU6Fxk>yfk>g*7z43J zfdb@inmluN7YjlH07o$T0}g5ZMGGJV^Q5A&;wC~q9bOC)EnezEOo=+zM-~we`#ME@ zelc*6q{?ZyeE{;@jHp2hC46vzX6vNt?7N_`s*&%zrxTy6(Bm2O`J;&vG10f z7=uX_6uvCyk4$A*5(+H&=719C(ZD#bdo>7QyF6kWZ?c##ga=L5f4@G{A?|e2QSL!^IBd@;%Eo4{j+f)Ec zJJ5du?!t!O2WT_fA+uDyv+fECQWjjc?KzeA$TL6wH)ZB@mNY(T;)pxG*EU4(s8J={t?^fYL*kI4K;x%oFvF&{D7qXM zgV^Smh^z>A831C{@vybyoX|N)V2OEl@U|H`2IwNLJ%@)5Xr$#@I(xm~p0;Ur*$FV~ z9pTub^yQZ=H6`)LK>_0&9fr!AHB|U|5i42SW60o$FuHO?K4WO9Kq7QSH4{oX^>I~I~m>0v# zfEaV~)Bdl+n$~}mzd`2Z{4)Fv+xNxF)Jp-?fcEGVsnrHyE7G#@PJjMT2*D00rA&}g z$rvlMqqLP8Q4*3C~fcZzX+-l=3a29 z><~}JZ4}L>Y!=@pYi7VJD~wY%2~Wdm+6?9!44A?HMp|pOmD0?v6?s=P@&hQp5n#4= zvL#CuoNGhBp0yhM*ML(=xF;YsS$9ld;zu-VfI!Y}B(4Iz_&h9p<+U82dcuFH3*F~$ zNYJ_7=xeHTPHC-fWVqR0WlaMjp~Lv{hFa}D<}bp|ps#}rTU*ukBQC!~B0HZq1ognTEKZPSR=m@>w_Vv^u z?WwW|`YLSO7dRMQ3Tn2b_Z7rF-?)N&6-7z~QhTR;DC|wFp$ZTk(_lq=`kl=@km$>% z3Z6Nu|E@UzDj=!WFRuybAY?yhZzlR8+~b*m0@ zmtoe*^v)t*AY*7D*TWTC!hRoq+iWUK!4Lb%rm)IfV4a(3v$H((qB0$I8f|RTY$a9O z6^m69p2)LLRjsMK#0B->bV}3uhc~rC4a#rQsj3o4cKCp5>9LqLG3>0{K=LSj6l7sg zquQ7E#*x(qmUg8x1Xx`o*EKjQ(ZUAeZ2B^yz0L&1!UUV`M4_;*0PNL#Zo%)n&yfc@ zE%jMyOsmQc)pG*|$25ZMNQF476hVN`>Sjpm zzGhADQ3>2!;;9!vfbaX&O+S}2C2Iv#m{`bQ{q>JJ0Z#Nzus;6t5h2K&HQjCJvp39X z;al^qnijFFkl0=wv9@_TnsAo)9D2zR%toSSXCHtpvZ!~3hueS~7QZNJ`NOpH<59y; zwVOTLGd~T6UPIOPsbHB9--huG%GQAE%%X5g=hY}{fcGz8Fu)}qRwm%|KnLLV02!p= z2skwP#DCS-{;J85MVF1%=WB~(nV~Rb*%A^s{|2Hs1(Z?(--y?e6_sXM#2FsL) zAxas81_9wiDq6#K zxtA0^z@XKZg6xhZLPU$B%Wz*n@j#^4$jVR)UUS7N6vT^jLH9}Zw?x3x^IScf6Ng(k z+foeHZ~i=iB?%A@ZzU{MnBS@YR%l$d35QEH2qLF}?o*T@q7|s6NyN7RX$U22lgEJG z;Vb}4A-Yok-8wM2>&@3dw*p7MC1z=8e{bsD{aL$Kg3S4nqaS)Db@_UZ3IqH`T7~g` zStiy0QgQSxscb^;5l=B}Z_w>-~2GtN)EZKwJV#-=-T(?L`8VOV&0h#+A;jj~loINY?@&Hu(|-RhgD_g;}R~8SK*EK*JBfaPptXv_#2~ z);B;h*}vfiLVs%n>A6zx10+XY2?h`{#qgbxtaC8uc<*iu+2g45h4R@y;JjAKxkEG* zdKKvA<7}eBOpGw0Ihc|TY87Uv;$>olQTN}Phr(_le|rL z0kbQJd=d|F-sDj8feizS4Xoa&B0LaqT`eFVO;K&IZF|(N!*qD0Gip>3u>F5oIp<5y z1V>jA3#WbzML_`K4S^MKwoSqp0zmIcw73hmx zI^JQ!DvN%Lnzr6?U(IIBfWx**BG4vwEG))S3P}hm9-)VkM9mq_Xun-4vt3Qy8r-WS ze$-YoI}(w1b7$+~sEl(IZ1n{rnB)W8d@(B+WqLvYblM(}8!OcY4t3r1>F-HOwxWTn zB8=O5Z#E}0Bi(i6c%d-PIcBWZvn(}Xgp6g`XhK9gdpe#*4yG-A+W9)IIN)>6w%J*) zWX7q~xF_v&CR^`k8wu-wf05zh0n(IS-x;+__t|OoPsTPynHr7hz)mKJ(sE-5wDF*(y=Y<)>`W!IcM_IUvs84x?|}3 zi&49yT%*@H<?-ECo|`E ztR*9XYgGckX4$MxG^vl3`GjuG8OraB84j- ztZLSyY*9?F%z!x!IPW7X+#HYSWbm2cL#E+0#s+XVXIUaqBd7A`Qj|Y(D_W*3x?*!S zb1$7ce@*w8MdTD{T-NtW zuJG2#ab@W_-Z>Zy+A3Kn2KYY`btMlQ{bsW*bM8g45!aghuXVV4Z0>H8OZD|%hU738 z2K8!i-BQ=$eux5mQchUO=G2}lj$`zaU< zgi?;XGC%;%peGN$Q3Mw+i`z{mG!^=EFm+v2BzD`&$|O|Dvh5<-ZhV@>>5O{q@<1No8a3z4*y zp@-4M6D~A3lDSqnY32Ilnp;c-6YrGixx9blW=Vp{X=x$avvX2YR0be z!rZ=frF#=Uq5O5WJa@Ph;yU7Jeur0@ygjiBSEaTWHX@GIiKymqp4l_vwQkEhetn_CVcex#gz}nj_HteAHeWXZn-dz}f*5T4 zaookf=E3!p4~Lw;lIx$|i!@eE>y>GVU68AA=6(6VTc=;}@FMl`3~dXf-2Z4gw)3Um zYxus3*I(YF2}Os4+_=&G{n_Xh%e0kUA(55qx9_iL%ESPL!^H8uG*WLup3s* zr0k`0i;7;;%<7DMFI(jun~0IcSA24jx&|_fvWu_srf1`ix1K%OuE;IKBh8!5rm*k& zmdZTfxV}^D$l_DZ{NI%&w0T_N(XU`0A>RW`SK*f$rx#vdWfvZ!{B@z{t7PGgv#!%m zWkX_4+jYmh@J<`_bjEe0O8&EVdr#?yJv$T?!>_W?M^o=?53P%++Vshoaq-2U>`;7m zJen*q5Oh{=HnxSpQ@(Qj+2hCCNjxqGf!9Bh(5z9cQcIO%5z42fJSo_X={5cw>(S8G z=1F^HJZd(0H|<8#`9f_$onjumUC898FvH^wxA6$WOksHeJ8o3mj`|=^&7A`&`(o0! z!b%O4@lCt?3EF2J=N=Fa6S%sS8&>@Ia`~Eg_~4*k`_Fg_OJB&MRCw>G4OtTfb+0 zY~ok09RL1nm;ngRe)V=UV^MaX;Pboh=W_!ZbF~!?KR*8*cKqE)ZNceE@n=)TuCE^t z^fo&&lpkt5)Ys`TcZt#6Ybx?R^9_Q zQgKL>(ZH{?VeKe7mjD$@Fd~?De0L3c?C? zU=dfO;5F!`cN*7IkFUzQ0@pl3X1u~5I~{*-cPC+Wg|KY$ zw7~~_MCIb_jmI~5&|3GMy#i=`md+WgryFGWY~#F@Pky^7@ztSR;Z>5D!3atjXfuoO zdB@epBTv3aw+dG5;Cos2$2)i`FK`m4y~-Sj^8|=>E&D6)8df&__5QC{~&=&{m7mv zE;DPrNYMK6^@H}JXZ`{%G@qCHoLFJj^e$|Rex&#ZT0L_(3T3adYn$tECmjK5c>YO` zN0=ISg+1sZB9TTYzc{tvdcBvcEsh+kcsUU2Hw3xJu7urF97co>c%M{0CNJCqWM=Gb zLRN6Aa_x`5?DQ9cPi848b71*H`N=~?B5H(5OYw17fPzYP-29Mr;iN|lx$B}gzdm`H)ETJjtOycLWFFqQkPOH7YrL*d*+S;p^07c(Rz&kqxf2Jg zOw02R-1~=bt1+MHNth&@&48hqmrp4^#N7-n<$hKKMkz|IS=Kb6CPU|s8jVfB92ysm za$WDA{^b5XBB0Zu`D)A2#qEQtdld}zCfb+&rby))xP>g`-ma549|ATlj}Yj^why^& zp6U}Y3G4^Tf#vye;bdj#ss7VF^mnoP)RgJC{L5DN(q%dIxprjgPN~*CnR|lc6+PZb zF^OvM5j~n+$&nu&8Cgw*H@ECxn{3^=b9@am^Px2C^h~q*Q_X~+`mr%sOaTTeoDm(zff3jYp1)6&y^4=2{HFXLdd*IT$M-Wo<6=&egRm8xR${fg-?=b z+AVBhJHT@{Vdf2hH>XaGKn;z$lgA?B04-j1C|KhKdLE-c-t>h&LyA5O4!Cv3mAepk zuQ#`}9h@qef?+|wmu_p%v!sAeh5=FVPT>`dEbd?t%quK z=ilX(9nL9+0>wG#DG!w(mr!pc(CrV&iHo8x=v{`5^S;`1kGGuX?%odq$d{b8gvI;w zOY4b@WiTcT3AKbn-4gSd$EPorDq)>fvy!Dm?uALYRwq0eK^!)jN`BY({{7tNY8ORu z!Q4lSi?VlTEu!Qy8V-2zhdaBtUDkp+{@t72G5kWMB|sxPp5m&Kb>A!Y9fbvW{>_m^ zeySd|&sc>!fN`_#CPDX=uCicde66CgOl7Ku%3bskAX++k{fgpV!nvk|mnSoz$kQ)n zoF?yzt-i^dAf?Iq^eZM89WqB84YA@2DXYs$nbz+x$pWh>u(r7OBOd0TdsS+%8b9$8 z0=0fcevurc?pN!y9g)Wxfw-$rkD-Fg@dqnCkhllV0C5rv;BP?k1jnW-N~_AtpyWVYg z1le6Ji0?chXM6eZ(uuFlGN3FNAO6&-L%w4|p@q=R&S?H;ymoJ9%D67nGRnGNDen8R zSDq)6$2k@f+rsVmayPeCC@wf$Tu1e1gn@X-ggvl{L2(s5v2O}8POwzRtrp0|ScQW6 zuwIWNJ>)F7u=p1o{oqr`s;y)8X~#R2_j)zMvFE!g{3xhZVW%%gsTa6n@*XC}uR3YD z3fwgimtHEY*&m5NBr7I@YUyl`WyK-X2M5flE5l+cElfR40erK^9TijSa)9yXUp$}y zVy;AgfKn%NdFDh3VL?gH1^Ht5CC|8r|HN=HxZ`7c2pw?_nY8`9;`NcH8m;btOY1KW zTOO#yGjEzo@W&>_8So-{1Mea_lXPj}3aekUPriR_?R>1$TW-1IePSpwz}02+pVj3Y zK~Ko#yk2G5)Z-S@emt52f%WQTVQvUj8WiF@#_7l*|FK0ED2a1;yvOc6M| z_bC6PFoWo&=v>ik_)>O#icOsP8%UR40Ef=#{!w z1U{2P1P`g(5QI!4VuSJbQ#>Bo&WCJ80vHDgtzpt-TeWQBO=)N5A>mtAZF2GSB$nwh% zI|B9C5Quo4xO8QIK3{IpFoRYV@f=r=JL(Ohrmdz@jRzDjHMi|)FpT9}XX)(n4t6|j zm>{q+3sCm$G6`}B9sr=vo`Ov^{5 zrpW|HAQ;8>hZtQuQ@ih4(xbnidR~P_f#c!bW%p~{Lt^!R>}c+7czRqmcB+kx(sj)%F4?Niy)Z8KT1`$>GT@CkKvL&`g zqKNWSe&Vw^V&jIcb-Wo(zw<+wsB#!qVmdj#9G^ca^y44(=RG&Xe`FkDx^NpvJ}i-V zW%w1Re8conWY()yOMBhnhxR;Y;z*JKj$Q!+e+bkIyt+K_Yu92y_rwJqbGIt)92z!#?!GR+@24^0$)5Aie^x5rVC+9^o$JVz{BCZqA}@L^13#~Lmt9qJW8UT1#>wqt zgQ09*NN+f-6Ayg3_|UN0)vIS&{Ov`AHxKz6f@WmQrxYKQTiIU=XNO5y}Or^kRjEt zpXdh|{P_FPntd86?wFgOxF_Rys4{)B84Mo!8Lx7C zgK@s@h5ECH`&^$L|Dw)YG_&@NL+T#1<4tP8Q#CWhj4K$qz2jNKsbR0WL&K{_O{=G# zeE+myBi=hQtX=A=_V>hcz~pSKzxw02B&#Njh#;(u79+J?B{!*aS@>*OWI9!_sS0!#UEF@6uYu3$?0NT{TG?&>utK%x^HXo z=0f7^M1bUNx2R)|G3rvIyX~IUQKX}?Uf#h?IjYH2TDq6(gHafF#$GX5L-f4m!gC+P zEBcxPQb*Skq@>FQvo-{0aDti9?&=2F=lCyvxSWt|2|vDqg|T(}f{&DNU2A>fG-ROu z>066053BSN@{4ED!N@he$V>sGMj<=O_wNWtGtF`nUS5^9#?z8dL);%wQp7mK&PD8F ztj3|c{JPv#7Sq!(<+y35-k8K~-|>Uv3f)E@2QnP*{(O4v5^zLO{g>&&*O%XW*+6ms zRiRg>axz8>&=E4pEn_d$WYTFLU2n!G38<7#_BoLOYIA>Ul*fMfrr1cuwsb-7@$UYz zfLga36{4pyFXuUXEiQ%~IvEoa>M!JX$B(Dz{@JV7Zq)(#N99g+Z0&7+HNMrqiM%T% z_zs&$t|hd2T2r{w_Z;k`!q_EYiep=~r~@R)T%AbfLZ*d9tI6T?>a+{R zze(eT`ej0oO+%65(+?;On$y6Be2*Cu30>wER_6BCuv$H|tiAu)hq+ji~N{psEilyJMGcC!=B!kX#L~>Vz2LDqQ>&emtwpBLZ=`HgtyeM z<_&TO7!0$yN@HaBvmc$x8KkLpnmP@vy%J!4vvYJLM7(k|-2Z&aO``3$aqXfXmLq#i3BlXwhsC>@YZ#L2Sni3ulgv;OKL}!vL%$$)A*EyuBVxK>$m@9&ps?q6;e>YoLHs| zp7g%ZHVPt4hpF_>@tYZ#6(WqnyIQ(r-0u6N)0{r?{k)9V!D~+`#;&Lzd^d~&pu>s- z9pWGjUTTNduJho63LYVzT7AVQJ={R4a|*|Shch=C3GDa|L`>-W`JmnFW%D8m)U;D;1>>kf-3 zCa5eBUY(Iq1-%~s=pjqE1qsYp+FQkSOo*KK!2N=OoQPvnf<@)7W5Of*MYV^C8dn@+ z7>_47wPPtVZchrxHw{M)A@r0}u0P1s&5 z@L2p&lD94J`_p~To>;b5Vm8_Di+e#m0izVp)-J135*9Z?5FO#NlWu@;yH*Q3AL z^65u(Vj*$G9FFn*Du*8m4nK`pc(yz91$I0mAsi zV%EU&o0G+R{Pg#NtqpRu7t1^_l~Vs7Q(qkwWf$!|0W&b9bR!A^(jg$JqNIS*%^(dD z(#_B)($c9CA}QSrAflww%>dFhNcZ>5d+%NA`%9N=jeDP+za8g1&mOz7P5ME4^LLvw zSzo#OsfL)p@DY4}TvT_P>5>6fC(QWl`%eyVg(Fz})ph3Ztm2|Ik_-D#|FK;?AX17= zz{)j{PCZi3SNV5k&|_&R@2co6Knu5SrTX|ad3HT764(py=93MXC_RntyOU%2D#_U{ z(2Y2p+3R&gf`1*tDD?;vW1u0pp&>pIpCCa{LKf#3GG5H8fr=Vs+q$(EFKWggakrS^ zuOaBysw6$?opof*XM-1)>>r+=$+Bi0?=B70Iuc4go|(d?$<-#C|3ai`k9M;R`8>rl za7d+nS{HsME{fMMuej*@oF`%fxpL0D0dVf*DuS7d+2}B0VZG`YehJZExib8(5vWA) zua40+#;!+a<^s!txr?DSMo`d>eENCNGPz4zZkPEe%tA0D_jGxp${vTW8-iKYCC2cF zAN;lusev>QTyMfyX9=1uZolH14FYXKTF9W~A@c#~Z)8|*uB?9^y~vtTDet~hTO%<@ zITPMp%?VmmyM`X+qS8wMJjsc5rdJTQ!T4x|+v%${_=2`RV7 z4_-D-`k#XqO}=1G!xKG_b*DNNsH95uZI1nDR#5Mg zKSFwcKK^-HPjNXxk5`R(NB>*tGmDq8R=)MCcU|WE1O<5Ej?C%b5EC2S?&sSu( z>7o0&dm6=9_9pM^W~Sz#bGgEP-`G?!Kc!yvNs9uffOs9P=iV?h9i5qkT6EQgc^_kO zTU_W;Zl{%3S8z=a17b`o;!}su;`Ysx>7VW)hog(-_`k-GfA;LApM^;lp(JIVA$z2~ z+rXEUzyWTlwdBeT{n5FMV*dPVKnJn?Z2?ST?v^kxv-tdi7 zol4_;fDklOv+xzKA9@XX?Ff8t*BGL}ycBhR5eKFk3@@8p$h%hOdnY2R z{Y+6j82x9b9l6t#FD|*X@qd!_%yivM|7Af5bDPzRiEs^Sk-g&Ss2VMUjX!={1KvY$ zi6YKzYEr80JpT@&DDDpIDsCm-JE%>mvU~Y*v zYAMZRu_)N!VKbGKoC~WU$Yr~Tk!k6e}2{gV$2-6PC_MZO2@(r4M5{7Zj>84bkzm|EM*z8{NB$vE3X zkuxB=i=Ea`)HzWz%W}Lwuti&o)8yBL|6Hw1~IG>h%DLGSl z9sCZX{7tJ%ncR_A*O%hJi2Z*8+*18EM*JjbEG5jcrS3G ze;K96m{$0g zk|bFOI%=5V+!(4YrBiLsT5#7_sBNQObk9BHiPeAY+%LT;1scL{20yn@Q%uB*(c^KZPAK$$-wYf>l8b9YxI_d(B*Qs=U^9 zB(i1^CweFmle}kNyEsD$rL2Rd@??9pfjT1)HXcQz3xK1T-l)0U7?i-3u_` zmfIy@XJ5%zo%MaCtN_esgo-o=kdFk&0WPvi{SWu z@GUa*{D&Sy*A{2qbBQcQY}OCx85t z7^7a9JQm|kdzfR|7wyU`RI*0&!Rhy%9~W!Guz3f}@(}y2C{#Yz=|z})r4H3GjZia9 zzJD+KH@KA|}925#rY95aJ*MTF0<2 zG}vvnFN+!hWZq{U`poMdCV9P3A#`7`OpFQa0QN`TdnP`AnYEu8vW%9bm^=dbHf{jG zgH{RNd-O~yZ}R9!&;q0vXh60@YDjUhbH8dJ?{mG7mnnF=bGE9TgQq8&V|pZskYsiE zdi5?<#iq86Ij0_SLgVD$pZ*TwxlJ~1b}xtB;GgtZf=BFGr?WjfJ3)`1I(n}}ZRkA* zES2@NijC=%@lJb4(?Vyf)Z+OJ=3ELnYg5?1-|i18(8#>*5mgt_E+u?!MnKm6WTW`S zCd*{*ywH!LX_?uZg|bn|Dj(Mb(E468TPxyWdR6qOU1||2IPMAFB4Db4c-j=0+@b@y z_Yj*uA6h``BPsNSf(;^pgXR-FMbD7Y?I@b)P3cdyY9dBGU4a-S-Dj*og zduU;zI2WB`tzD99JINNyRm7$e=60;jJTAc0$>Sy^#Pio{&m%IH`|8bJNd2dP%PG;Y zK<-5+w^J9k=Nfa?7`90*(5})(_{GD+a#DDXD(CYc`dx^KwxfQAizfx|S7NehqztJ% z!;@SUJE!I#Ncj|A8Tf05cua^(>a5J~zZTxTxzkmZn{Yav@wn{%L`NZ-Qbhm99s9I8 z{yD*Fy--8Hgl_DKlVa@xk!sUuiQxkAcRlnuF9mObjH&{2rLIxrGI% zK=A7ZDmPVsszS%{{eG5Z=q`^;iY#+b(Yczk_nqv`PjBZIK3G-%7;&@1_r(7Qw>{no zjk220djPpkU$>y$7UgPWWPljM7-_mD>>Q+#;vp5O*;|plw(Cbs(kV^l58UVRC;ZxT zjM>z@jR*(5y>5=*hHL6|G<$W37#^wES3CNe6!+vps`IfYU8SXM&yCknc{m@Y6aFoI>@GLRzdR zeh%I}*|l7d+Q|x+8t+}_KLtLaUU-!BS3LPos&!ZNAaM%<`bPd-i_|l zDYE_D`O*qWn}HB1%{CTN)qt^GA!r!b*2NE47>bhO7mROQB3VkUf7y09e`u7zyx41dL(UIL+UP%fU$(2!!O) zm?zVx!?O*tKMp)!U(|54(r<#?qrngNf4D}2d5`Z_6-Xe(RBc`)_o54^KQPotNqzeY zP5`st0YYEJLEzwPt(y;zDU*$jagqEdes=^78lILX9Q=I#t6Z|5N(}N*(SWu?&VTbC zp;#x!o)&}UjoMFwLgl-31KgAYxy+!rj`#03dAiES<}217pV81Cid-|7KR@&3mUfpX zkI1tc7y3Ct?&~DtI3nyW(jwb+=$eu>M%+La^=*-mXGBB|*v5dSJ)W`(pt>e*A?}Cr z=+&A5*4;=Bm`a47oXv6e?1u+g9&d1c`8%|DGsJ3)VCltxbuuKAtRXyKsneqMyW5!T z(!7zUR=F%`^Gm+%zdVzTm$I^H57Isw%^CV}DM1|gYG4GRVT$H@3PT&D?bj0*N1VS` z9_X)WH#7gcfjNQ^ogE6;IL0l{J_y$|zCxC;OooUk(>V#sG1xTqw18?Y;`pe~xWR$8 z`%-*aIqyqcXE@pgnT{K?CH!8oMmK|P@w9tdDzOu_^Fy(;KXAG2+zg@3#rrHRNsSZsu` z(WskY?g;Ks{e$Md^4z=V;E%SW{YSn!@bQoxY6iO7G3+1;aBYkRays}PCV(aFZ4hn6 zVwzVNxb1(%?33ZxnXLyvvSW}%Fmqc@b+*cxpYX?(6Vb*qDtw@HR=DMrFC;g}pt$#J zY;wDr)zRrBnXm_JOUiQzxizPIbYs6s#!S~I&T8lo?J)%DK zgj_ED$XLF;&F-yY`H!>#C=$B(7M^(FiiBBeY`NUWdc3)SNBI5iXNqOSW`0u-1aAh` zBMuzUB58Tv#QL%~MmPa~>>fa!$YVJ2Nbl7!N9_^CDD^iFth6j>{NFKB9G}e53h`05 z!DKsn;%9L4x9XNzb7qg39FCSeEt6ZZd$vQf8=i(u~UxR0q_mO~P+Y$lu7kSjb)2;io$g;yozRb$u$ICvy+eKJu@zdfF+>$7K9Z z&%QdS0!oRN{5vlUG$h&e0pC1`uR zGLC=kcI8PeNTBpxk?RyD)2o)Z#y8XO?}uflw7Q4YWb?U`Y|g&$kkes26$Kw&h!vT( z+F6s(cgxkrvD;2^ErQ_kQ*x(i{927i>4HjJuo?T#O*ZUYj9silXb-ICMn>~{=n+UX zo$%%%VQSHp4}@x(R1N-QM8o`;3>)bF^_a;FUEtM~R!yG$r;)dE0hJTi=_D5v@Qa=U zl`~&)VYIP}sOQULzBlQ(y{sPut^n_$3XT~8wKb+?f(6o|qcYM!^(=x?14ARt-Fse` z$Eg#zK3U@0q_ z5A!*KsiD;1Pv$|oMz;>bvSrMRG950c5p|(OC!xzX5yg(E*oh~j_tJh-mis_+j@EoQ z%tu~%pM5>77~wdaMc|fLmWOTb2HLkI*$p0m2$ez4uui2<5JX_0ajJ{U0!J z!TPf>n-_A#Bjb;0X>isjJNW|kCERWZE6~H0vG>N*xhj4<+k(q@enVn0E2cGN>>xtO zb~lE%Z!~tS#hUWzRN(-AYWVLtOCgLMekkb~>BhAckLZxi?x(&N(9?g4rxMx`ZEqK> zk%n)jgUa{HnZtdq#^T&|_J*q&MpT^d>C-+Xq5&M2D0~JGUpCnugcUqt;Y9Q`lwR-+ z#bgvca-T2bJ8ngD>1PD#BLR#Ilc)Z*N?AxN{e(3KiDXV8nnS&(DJm)G!E!TwlDEII z!SVWl2Qto%6^7<;k>H$2oX-9&TfJD`&JwCOkJ1U2sKc8TLY5!3XRjV}pqJB9NV@%{ z_ZX3Ql~la==Kvv}7q=nvRD@{FJsi%AI{h`1dxVdSI{6rbP8@w;=H~ELk8XHF+`bOj z_6TI6TKl;=*qu631g^%JdyCcYLNod{)q8_PfO`2;*2Y& z{E#MYzA73Kr>2qzo4@$Bjwq764<25!G0^iRGzT?DHLR@-%OCd!^s%CbV z3R@j+LO)`5!k=Z<(+y>XeC|-G*Qf{1^jGG8wojjgIl}A%@ISy`35CXseW$cLGJkzl z(Rh@CYnC7SlPT}(eS5S2C}OB3X^0eNGqwa{EKSYZg#Uin+|xwSHbZPNW+pztga18w zZ78Xk`{bcZb=-6iN*uM1+*oMCCEt5M&m&fQh-VG!t$W6RxDCiR(Prv5vp3~Wve$6a zImHc14Z-3g3a3pbRd?>9H3bUR5ma(@&u{0)GUMN2cE1t{{ciu`Xz=A51=a%=ADQQ| zyTBUAd|AU0PFY*vv@#cQFV%b7n`bov$J7y7b7~KJXn4_&k-S(jea?^?T*HV^$bitY z544!>ZH&V){*@nD1*b1|I&&L$4}euqR{+6q00?HoCtTuNJx6q5``~h)ip%M17hRt8 zF_H}R$ctfzR`S)WtZmH(M({U{j2PNPqHc;EpMQa#o zqmO`u!#Z|tIqb>gXvm_EE>Z)IV#T%Iufb54*w8OGF z#Jrwut@9qwkZYV+SNxG-y(hE0lGH&7Yf^w0i@p8pw)xEgI)b`|EF)a{hx^Y{--uua z;Oy4RXKJWD6GI$^Q;Mo0f{;Cp{~g4qCq=3reP`F!A~5R#FiX_7a5E;SCfPQWjn%+OBE!Grx04p=UoD{Koe$r0klB! z8$6l$Ywa0i8KwB9f#W5Phm-1PUF5_8JgQwF=Vvs9QhT@4|Cd$GUyWLbq)HGn!88+3 zwZPJPbT9DKJ;NrTjCqeSqn4-(L&6lh6Ho#oVBNbDE1@q=?DQrP=5 ztZ0R$Iq&y<%!~Lz8?Yma0^0+xlvXNA=KXI7fYcm$Runx`szey=iH+rq z&gdSwh9z53Q%Kfy_R}_Vo2aa+aQn?{Ucep=R;|%~P(fNQg!}gzdt2ybR$)1XAX$U( zn8jVx+W%m6CDLz!(97j`+CFdsJtK_qc7A#Q^tnzH~r~c zw+GIH@zNb}^^%iC(N{>8Y@ke^&GWpqCnV~92Fgf}uwx?3G@C1m243{a4dr5nY zFAm{Mk(?%j!IQAk%XKvtBg2p`#M+ZboVMbuEQ4Qmy=>DCYNq*tfWJj+>0CUt0N+A-)9aQ({Dxu3n0CLTbc zajBn{CfLuvKR(aePI6dvXs85;!IlixR9)1Qf_vO{!GA{_>~mOs?L{y7 zwvUcP+g8@iyr8DsuQ352>dkUHo1&99P$}EXLQ25+PNlzS~!O5aoPAFdh=B@0D zAbevtCY6Zvc1yTZ$k=D3TK@U&YJ>NkvbGk_0lnGrGja|G$uS=#l`n&P(J*0uU2)m7 zz8*G#?wb4yhBWKPSu_8c(|#(@)zs~r8y#-7#c}i|(u85;=EfXzr|1rnK@d{M7;>S(2S2cns!bN_=8-L|1^^fzZ+Kd``6&Wp9Pcnai?=U3OdD0^sn*9YfDp zj;5Ob){}v~2^;pSwFzKvB2M1$5zljnluNXAIBqp5aRl-w6nC48J#11Z_!>Qz#Ym8; z3&FApGL$+7G9A9e==NtT-4&|0RgD7b_L#-ux!>sAbK6NT3KgGFKM4fmCP5#x~Rz7`c3knV1=J)Ls!V=pY=%hz7dndUT zFhv|T`}^e)e#?rWyow4aA-_p~5WNL9j067N*kyZ5Fmyz6*`Mzp8TOta3$IzdMXuES zQP>aP_G~<+{?#Yl93y#uO$6_C9Lf*=##=vP--hVp|505W_QsAz-gU(2BlUQKv21gy ztqKe3?OLrq6gdP%O+XfR&}+*QdRH{@lwwbVD25T$BiMWs2bJL!5yW*W*?St9v8IrI zNcqsx0X6Qbmy*~dcfAG~UdB0>bQq!C0%R*}K`}BU&BQMO{R9)qE1+XMLRp?pFa%uC zVXEVepmpdd9*vuboIJ;Djr$Y61Pb;ddYv^@r@fjuP2hqt@Alt!+oy{{^I3mVCp=Gm zPHp>RuNYev1VAj6m`7r%xUSw3Zso@x?V9&Bx(Bx(zaPpBbH|GSO`LMg2HO=2;+KjT zNW4_dLsY^?LiJpgDD>4Zay-C&tj(>inmzNcu$&cUKQ6|pBto_J&vr$WRQH#0owbqL zsY>ia(~P;d28zNy88$){&g$SRlo#(6GX;PK$d>_>C9>8z$CqYw=LWqU=2GjN4rn9F z+z(ZbMq=&*4lC3u+z#n`qo2as1`MZpP^Yh%6sv4`sB96TWEq}FdSAMTHWE3ww*ke| z16#dqjvR;jloF#{4(aLtn!Kh%{|qcP4hD2y_xIke839JP4w*%~2e1TyiqcQOOLtbU zE~Q@3ij)Gnc*+jicERvt=<}-LI-P;V-&d8hlOB4Akyw?G*TNrs=zefsyt&FCTarb! zd2NZEOIy)}-fthe65sp#PC+aM*sI{`xwh@QOb5DI&&*#{{fmetxg>o34f#fQ0@oCv z;00ooxUU@9)Bg|(URXBkdTir7*V<_ZKSb6r;;lh!JIw9%;b51spZBBomq}`wF zF3%&~X=f#ZcONT@XqOoWKARMMrYc$b-{IH43!k8IWQ5be5AHZ0I(o->;F)?Gt`h_)bfaL3s_P{E^Ep?AS-*=nea^P@OGh(~9H`bBJ4ZakR7PLT! zmNPK=Z~J%xFABlo%qNs5AKp6|Hlr) zhZNNhX8ANmOGnrbpC`sPUgx%6kS3Mz-pF0cHgB-8*ZlU|YgKjr_*v-|<9$!)44{^pDHwONgkDO%4aaNvg`&u899c4G;;LfvM8u^&9V3u}V>v%98sGj0%Q%6+{F zm6;D?bO9%e#H~k0m)9{q-o3K12nR&u^MpcKFaECaEQ1-4o5gKL~%k+Nh` ze~TAL0!4@;bO1I6%eKE^i?bRol1l6Qw0%?j*dp7WGt@sMTks{7Yj=}p$(?BDP64aK zXzmTzUz4~Pr#vxLPRx(c{e?Q=%ER|&(1$mCbidKY@ck>R({Bv9QcBEkqU8Z8Lg7%E zKB_C)2J!~HsuPD%I&^vdRF(krv;Aqy+^|U{dTnw0?L!;-T$r33i-I1&iUMQVlmS!q z=8C^Xg`R$3^lb-jy=K8>g}uSbOo6|Zk?{S;M&X9~*;Ko->I^+t+wegiGUG{IPHF1pegRpUwIE8mUiozf(Vkr#RiH8}1i1y4)%CVaQ4@ z^1R*hhLWkC#Q()kn>Hh>;FlxCOV_?z+f5VRG=>GnCJHrWKZ97#VW|uLyf(V7)!#LO z*Mb-G)8{m7UKIb<2MF#OtK#{@Jm>| z*){Mz>A2%->)wo>_d?hI8!acSmm^Lk74+T`W3fsC%dKUZ0DsPL{_*LHUZX%5Y4 zxO%G2+{W0|qf;4PoZqft>O{NVL}7+gax$@{UInI+U0Ji9A`{XB^>f!eMA#Lq>BOs* zD;urs5FT>G5O~*POc{RYuh-%;o!x((Qxq7~fR$`0>UAuR;9r*NGwzQ&@sAy=&s0~f zaP@$mVPke0*H(!hZns%^w^A(ZU7-R{9?AzTdxNv_8j0)=2=!)F67%oBeP09K+DFG` zQ^mptLFM7E4f!PdK3;jl20BOtPj5>E2^05g1>IsgUKX9vpF>;v+Q==>lHByR`L%Xa zYDw3e1WBanS<^Q9=RZ(l$>3OC^QO4S8su zQn^TC#eZ(D4qqzqfW6e5|Gntg8LiDl!)UvH`PkD&{P98;Z*_gYUthrB^EUaMY4G>X zp2ds|r|?4J%BG=RW((}5?Sg>6VFg+4UHwEuZW%wn0u-IH>qj7Q|KLIwAeruq@TO(o zN#w(MR!zJDBNN%{QRPKBrH);}pPO$Es>FuBE(xJ8@J}?orf<*CkouFieJBdFXjlX{ zRMj(%c`%AsPuwYb)48khZI@qbW2)WQL{8Sn*^Pz8lV7gcB0xds{^Stq2vq^)`LKH- zZa4D7NVt6v&>!Vj1#~9Z0n(Qw#+82cPLBBH*wKI1ZOg>|XD&~&W%laW10SYq;P z;@CHNMU1Q}#kDpXJMZS_x-~%iFG&$5_;I-8zzY_r?|Y$!d5ZZ;ylK@E4X`tyBZ)Dg zX`sEi4VX6JQw>aCezIGMyQVjz3(S&iJin}WUC$kQwB)M4N#5Wh`C(4bA%X?F!HU6F z6k^oo(E2oc9uo3$UbIrXLOJ2O_w`b5Ir99=g_ACN)iZSqn3ifvu|hQxbtlb8FNH&u zb$t18apdJMR6VENyw22_Q8pdXWpPNWXkt!&a(_TD&9K$SB;|vRS*9n6+L51Vu_T(6 z&96Db#S=s3dhCaFt&aGbf6 zU9!FE)0!p>_!Zq71SiQty42SPPCIuo9GEiVU2vdY!CC^lvb|C=FkG^>ZnzM~Krkj4 zbtFCJ#qj3*dGb%>8!&)SbY%;P&>V))BuDU&E{Plp-y{iQ2w#_-fY{zdx z<}8%uW~6u_<4n`$-omulheA>i(!OEQqnX@L~O7&U)C(M0Vvl^#Wkw zvj-KBeinT_mY?n)s>FC3^d2uz6~P}F-?1;#O#{(+xO*8lI!=UDiDeDt5di~vQMo`LXOc2Y@TJhX&A&vTB-CxLdPP_fCHuR^0 z3w5E{WOn6@YL)B#sy7?Q#?~g?LRId~oGuE@7e$Fr7R6CS!E(a^dS6H(KtpDkM6netnT&=_QZJ-mK$Q);zSdu530=|HO@EMVUQ1ws$=L+JqnN zl&8y&qK*su=wpA;8B`ITyMw=nOKCq?&w43nUB2%QRUVU$tiSXe^VKK}tfCp3Khqjy z3?#o1uj_O?1bc#Ihx+$gX;G9UUL4Aa|B5Zq&F&k=Q&YP)dK;c2!w0nsi=GHOovm*4 z#LqLhLa3e9_|$hj=vqR^oOJWmF-R9q%4tH=%x?uV=)k(vRM* z+o^u)1rHL6c{x0^#fWe!vOf-GzJbUMYBfWoPX&pYx934~oj{CKbiIxcuNq=;uKEkh z9wYtRHBqr>X=dTK8OxAP2drtkv;TIgkyx+>xVA4?kB+mq zZ1~MQAGkA~FjTvXSy}+8ilpp`?;FptPmIMiWO*J$r;Bct7CGl8i}hWLDfTA?({$bE z2h0OgQnKGunggESboY)~eLr0BK3WvmFETH3U24BC9r3Z%OwcXmL{3TXd@keRkO2@# z`tH+X+mxoI9Uo&>JWqlU{?C1r1ASx}v4fM2UI&O{O^suLx$EHa$mZ(i^qT3j9(4T| zN3;~kwixYW$m2q)toiI2nKi7LCk0?O10JL+PU30fUF$B@@bljN4O4xjfP~wUjp8$p zbxVm&cJFeW_wz6QUI`pH@e0b(sdxBXtJl~x|NPn|Kw-`kQZ)BpR{d5`jNU>ApgZ$p z()WZWan|Yw$dmOheoJQRywlzrAfd8r?6p5ZQZP`6#byM7BU& zHR>~u|6us4@g3!_&ucs#G%TD=O6VF1~hl&`7gWVzf1#U z&a(tP&hS0GM!qpLoY-C_>tiN~O})*eP#jK9Bu)^lml2#0iF2Tl)qT%O+!2#Vp3 zF+268&Q%3OSq#99RuTz33Bpr3>p8(4Q%&>*beJw;V@LM5VAxT9uVL=(nM!@~dFaOH z;T@EE$^9*6&6{NXfSGo8mNmGlruirM#@Zesy4UJmVPd)LL&~ZNhcN?YZ`#wa!-HnI zjr;i#!g$9m%x&34o@xzO<_+$s1NG)`zbU8SBnhjvo=MvYN%QQ3FZpqqO^ zbe>f0-ro>qyb26jb=)q5E(WkMV`^UI#L-be@uZwrk88-WGun$D)bv4Bzj1pj_f@meVD_*$JQ=4yJ3w>-7IaInx2f=hLmIvS{xv6CfRJezinPy>(At zTR@qjBkP>yp&B&FN$DlEFLDVo_U zC>LLMv(!^)KG51LVovfy7b`P5Or>Ic7y25$4dyjzaz@zgy*0DWWuChSu!ktIL=(B( ztt7J31zK;ib(~m&N<(Bt~)Jj5*oDN$CXNaL7J+wb+SF6>?hwpsk+QJ+(wydWjFg4 zs8Q_mhQR`8W^@%g4+y96?o;E}Xj;@WrQp2+_q}BHy#&ZMk8(+H4o4aBIpxMd5alUK zbp8{GEn8U_9RV-tYhWGMbH{V-l2ouxY)3VbK?A@+K-eAYqpD2^6w3x1cwIk~7LQ1J zQlh3TSF!bk(Q>Bank=8EaMf1+bVlCgnRAr=N#UkFkYiIsCfaa0Hrq;!q^i_-$N#y% zgDMMyCs5tkFz1x75^wxMYv#M0uwhcsB)~;=00-tX0LYBUjw(GKT*=FTWGs zFp=~_kC%)|Ds}Dr-UfxCa-uaQUq7+u1eeyR!g-@R%rZHRWPy2(FbjOh+jI++nl~io z(r;wsl?Yy_&D{19y(%$Us_F)uL_;xcQf+-0|4f0%fo4@H>ltd=-B z`3ZkAwdUhS2H+=2Vv;h~j}Gn1!F zlduxWE`rqb-xJcA9kbHLE>Yh@9=(aAV%CbT5wGhH2NA44Yn}BPVmi>rXzP5Evq8uY zOQ6Ce))K_!_xr#n<{Z^-U%C2=ZKSRyE2q}+5fR^xu}*t#cy%ec5m)oay@kOrarE$0 zxajdZJF-mp*+{S)0N!YUpd&7na_Ht03wGdOhGgEb#QxH1#(UqyI%r5JTLy@!Tw{IW zpVr{a`n}`%E54L<_uAvzvfdtkyNw=Pkqhm_6&mG8##R&`idpINnDzUR2A-|?yJNWG zI0Nh~6yk0$BlS%DjH8j8YIl}hz7S8~J+UBs9ME0@PpGs`~%4pw}cWLz7 zvE@28b0)A{m^9Hgq(v=Uw?88c9`}E{0H(w|mw5dBS~KwZ8_LVqxiyW+43l&zn;z_I zLAxw<3yw@gUJRQ8{SAMbT`nq#BwqbR&Sx8jdln}Ch`$UKweiApd6v>P55T6;N5tM7 z%3qCuk_~DDVoc$Ilyl%W4~>1TzE_RFGGb(rTnFU;cFClS$>abfOG_V;6Px&ttCfwS z%2!KNNmsCJLsjFXS{o0|8k=YeHB7>3cjdwsNaPX^cxvgF?x35{?aDmEJ&9rpjHv|` zD@96-XDUE4d`yp3Nz_h#rHXlu+;YW7d*mZe79Kd1JZvTKCw@&NO-8)c8_M};s}Os& zrl~Kd*o<~|4mE0;E!gbErQSp$F~*K~HVXs)xk3Aj{a=2W|Kb*HT(`3`_kSu}MtGgu%Y zWL|xaEc7@`gcGglle31yBrepRq0PxMG_uhap7h=4QW~H3AV9kBFw)rVDC+`n-sh`R z%X4X255l8LS{&p zZhq)~2@gd1u-djco_qd(M##Q}_kK1UswZYY$ z>&%S~r)NwLUEloBwJ-liHM|;>3!+rEpd+?xm=GmRKpdDug{xU{uc{#ESjS6pllPZ~d^G@CxM(w%%I z$!8S=d|jtTLvO9ouf5CaF6m05-r7HIc%rGkeu`-3nH;*gVEJlzGTb?tR2eAz*>JrE z`};7kA|w)e)kh_R&qVYd)t{d3!5;b+Y<3AJzLLK5=4DD;dqayhkL>Cj+tnC5;B`2X zdS~|fgxqNNoDG_~QR+#~+S2qOi1iJSP@Hvga!0$1dQr*BA9oedDg_rH1#1_d)Jz~O zXx3Y!d6YHPp2}eq(Jvo0#-y5p)IryfsTQY({LRUSs&_?JZP~mRJteH<(_ZWpYRdp6 z%)9pGcoQ>Zvg5Svj!AiW_=c9=QUScZckFKLV(FTZ-PUHb$QEP<${4S^Gbl*kKuZTR z9v{2L`Q_Dr4x;mi=v2&3tGv6Hsui3CF(#a$6&?<1*E*nb28qXp_4yU4u8pBg zZPMp~QbhNpYA$}Cw?@UL_CV;(wzahI5^-#^A0JyaG^xXMrzaRT>T>sZB^(Oa*$-=Ur-8MO<(yD*Wqo^4C?@wr`^X zXMf^t3>+eh4|&C(guhQ~9dI0?RY?#>bQufqivZ_(x49470^1oL)52C8C^p*Ta&+MaYHJ@}^A3 zrgw)ZpSsy+R_E*9dgA3bv?x*r$z>O~$*NrPK!?-Gy5iX&aJ^6A+x1`)@T6+>G>5mt zD9fzml62tt5cs(*kCqtuWHi-!dB082P$12z7OY~(?EsLnrWEeD1J#ouRNGEkg~0hzEb;lB`NJ&klub(KxKCXjqjk|;`N&f{wAvv8OL%1% zySh!{WSMKyQ#q>eI0blgs`~@s7WOb3(7Gesb!Wy+;>caIq1kNX3Y3GlE5J-<3BxrU zzEa>E1$Z}0k)gZNFFj-fJ%;9vZ`A~d_dxOuiZWM97pQ?(^?p^0Y8^!>rOxF(LtNMK zGcPNd(Vln~m=Cl9U4!4sSyjsxuSNe_oRjUAdfuA%bK=}(dcz{e+$dpDlxTh58CD8B zb7ZW+(7gY6gO03)?ESs)CJiW=^@asb0Ao079<}<0a6z~rIiCgLtA}kb)NUw0EQ7!A zHMrofLtiI|O zp>|2SK%fZf^&tz0DLDu8fO|eT!3T9^c~wPHY))8*RRVz^QT$&-?Bz>=spGYQKM+Ol zf?`9rzh%@GNRz_&hYb9nSgT=}J#|7s{OJeO2r5R&&36G0233Vd7Yc)X6Rl5En4us4 zj}IR zCp63z=@xu~vQc7mlaV)6dyO%|b=G|@-3xfm&f{tIt+vDr{ZdPII%?{uz0a<%&JJP# z`N;VRd;Itko`cp?%4Cxr?0<1G)*s{ta4{x?oK=nxB6dS~ntRblhlvbRQt76OD^0xwl$TdkH^;c(n`HpJDJY zzCQ~mzKVF*6KOum=pjPa<-a8KxEmUIx9qP;=IBBlTCAVpRQ+B+fSCNxOz@S`LL?EG zNWEyKHtAvGi3d~Vfof^Zio0R&ppa8ROm^e)=L*-OBw%U?l}Qt0Xm}7>$8aQoqn(YT zeM3oKDd0k5=T-nT^BpTaIV`n+z#@5c7qgUA8+1GTv&Y3kx#*9@;^8+h9}!i<+GK(= zl{^j-bW?})Bm)VyA2D2EtvBf4&++bkaOz30z8wForu_J-6CIKdJdJ{upjo}&_M^bx zc{;ijc)GYUAYIf+aL-gGIY(Zxa)$9PD)j3d(BMzhCdWx06ot#X1HDx5p@Sg)@X}YA z&UWQTuyV-pkUEgL17sJB$;pWOiQV?>w!+uWc7qhbY;5z__0EBytw?X!uG1}>AVxm6v5-f_#?Rl64 z;j2e~vJpy)3z_}IOl$71^`B>UM~M>nrlYbUq$CXzm?o4IG>5?Z0aE`_9BLkXfX_=; zX^S2Pf9?yoTO%b)qR)vOK-Eq&JHT4vm-jV3=yG_C-ZX*Xamb&+CBnY8M2;2xXYTt9 z-`|p}PMj|o0pa0bJ1&1=rd`whZcIOQOJe>#>d@dM)E=aanW_fd4pooX-eC|cjNQST zO{hK=LJ|xJefFd=IA1wE8h*3J)LWFWdUmaW?m+M6gTx%XX0E+?d8$LihuOo*l$USI z+I!Um-GmN*{X4}vm(h_3p!yv5%Ydo2lg!|S!XXj2!g4?w>|;?p-W=4t=Z~4lggz!w z2a7*0HFYn#1C70VV?X!Nodxlgzgw7`Q@$m~qINf$T=6lluKNToyb|bPRY-oK^fVuT zqF%}*clM-UkwJV@`;-0dI^WYA`{2d&j7;Y5q&K;EV!i&OAUhu&O{aZ`CQQscwZe0^C z2}Xs#+cgA;>sX+99^3}3>;V z?~Y#KExAVV4M&Rrzua6U_AY=~qIrs8uMDC}qzDsa!zJLafiVjUPpqdUrAavUEWXjsB191FQcft3ws4(y>#Nji;^6+kX`M!VB`ffSi$Lt`;~f;{W*7A#YXvO!LEw;@(`gg4mbaTZzDTy5Rb4X<`q& zUdcq6J@$_WNa8ISksnb1&o6EMmn1b6y`5W4suW>T4x3}u>dIC3DFg65gmy?kw4Ig- zE%bI9$-XV{ftY}(Xtr_wCI_5qsiCIDU?2m1ji2--?HJA^UkJ111B5gRJtYBt+x6cs z>A&A2Zx2sPyF1xRw!}jYJHbgQ>VK6p@L8XEsqkU{ku>S2pg-ASA3M4nLJ$%P5lC{mnqY95}+&(Q{R zyaPCF0yze_tZ$bUBr!pnCV@`nY+CPSy zf%_(cyO{ZPF1uP%Gh_;YR zv=dvoJ$*T73W)1@gQ>xc;S}-7V*~HKi_Q{sz31Uh7sSgwuXzyJ!D>OC-h$sr#eW)C zq>$9W;=U-Ji9N{IiDY}Qb~JuhRl$dt4Ax82c<%fVi~f1PD`N<;{*tVNxC?~++j7d(uvLiC+0*6O(eisdAD)4UTN39876Zq^7UyiW_XcLlE`n3|1ift)EO9U zPFH^7R7@8jgBu1$qKd`q7hl-RkbeEe?M5u-O6S6ixNiPHxlm&)0Z_H_Z@(lbkL(-Q|&qt0e<4pmN@W@5E}I+aAK z$i>L}c;a6%x-uhm^e=qjn$u=p3`DjjZEMS?$>Oj3wVLvhxQcy z4UTu9lL7*(^VxX(n!lbee=LwC*h#u%&Y@}BC-Y7DcaYALrJH%e8hP*fheBg`q5dD) z`d;5TDd3q~On;;cOoC;2B|5)E$pD4jQ;Z8`Mn2skeN&G3L;&;~-%1Rb7Q>MsgkP2> zSeH(lVv0ntWuHaoMD8sG&tCd-dzBt14etd3k*a%(&-GGwHkh6pI{>VLpsr{*v098w zI&vpMz!d{TE?{El0@@laNLMD*Su?vH$3+4o*Fuq)w;hT3;s2C1e2-B)dhqkPmPPn@ z0&w}l(XRzRIfJ(tPF}u{DJjc)XH^_`6)Y}-tLV<{>#p39n<cKBrU7{5481@GF&Y zugh3N%c+2C$9;b!fzT%-blDK^cwKL%I8!~4E#gdkJ2e29?QDls{oMiHi6T?_B23RG zCW}k5L;>K{<0lGCp771;XK~6agFx2Cm5C|e_BVYC3{@|+>(uPhOa}I&#>baW;k22| zc&fPYqXQKJ~?V@|| zHi2^%-&TOYMs%!vy#?A*lX0t(IN{e{LrmY3&%@jFPC9I(fLSttN+_dws#YAs#bw{Q zVpV97h>B%XO$6XBi|Er=CwRZ&ag{)#&&h^$ocOk}cY+gchna8yW-{s6b?g>oG~8Y9 zg7kq)TI>~u-3}oKHe&4nWJVXID=*trDC5-Ne&B4GLOr%PRk^4bz_qbS*X~*aq=WHN zkOoVU_OVXxd7GeTqu6s;W)P9XFqKj?YXv`!3w{wSW|#;-wutdc?+A_Gbx)L6#U5O) z#y*tqUEp0Z7)0ZzW?O2svonatf@x-ei#~84U}hCDe7yCpk<~$SzwKQzhElkfaM7px z&|`N7`fXk=9bv#9iYbqbn30#fP^Ih58Ni6U1ETSc**wQgB$#9w_Xz!?t5Kni%ezjG zRz@a?P0H4{GbzKvVu8v;Kt6o#+Sx-IR=Ihn-siPNqf`8}(~hp=XcrfW$zzku1y9=XtZ&#|BNOfp6s8gGiR!Hn zobQ+#(gT6$N52N3T5L^UXsmv0t;!Sg62Qs&2fisC zx&v~A6xOV@YH-e#3n_Xz`oR0aRClrHNy!k1s@p$NFR!y(8=z%-C{_ywJvqPe}y7mn6dtMoJk3!({A6{+I`T^b_yx-e_ zq2dNe6v(5-KX`sKVKRAp-6|6;d)z#l5&XFzy>SGn;NHU-63LEW^?nF|j(~9XboE1q zez{{Ot3PKRl)&z42Qc^ILuK15Ca0MyeuNtq9bYNGVCB4jCMlH7pRU}S55E}c#>AEkLLK#H;5D~fF!xO@jta|e z;l8?PY$x!eX8Q}7oyVU_l{7?2y1&s7nJ`28_%~HSwmi-jMv${Ti*8hBWj8%C?kNYV z(ENk10z96-@R9_zy%uodl#;y-7dM?l=Us=ql`D?pQpL_pvIR@%+p||>I#GalW(KE- z7A>mDHgUI~A&g>ARE}+G&E$Y{e*sQvTE;a@mSOddfSvT{~~B0Cy*_G-VR0R z&CvyzcvR`I3ks&Su8JJ>$A zBlj$`HeT3J=%XL{#7Ao4EH(!lirI?S#J#&;wa+%^64e-)C-zjj9_sLoE!=@^7r16v zgOi1-wPGWmAJok1)=LJdR?#&I>Hg)8bD6HUT~I>ssI?iKCvdT^FvSN- zu(D9rHf*ypx{=eG0WUOYc&zYEm?1zLcjg2))MI|T18L6fPBkXvyZn;E>_;!VDq1>J z0)Wd?gZCrn%>Y-fF3#M*edm)rDltjF#8VJq>cH7b|IoK8!+o!Ty7mZ|rL%w6?BOFB z1o;pK-eMp3TrHFj#KnP~qyb=ei5+{k?_=p5e)FJb!OmAfRF%=4=jn9|a%@q zV~7FFG{-D96w2}j0-D0RczSHgK33$bs-k=UnBhWa9D*`o5?^?{iDJ?d1r;X~zfG-ceOfAqB&##sEB{G!xTo<9@IwY_%u(WFH& z!}?uCqsWjchBjU0>KZK`*HB_#Ry8MmB)zD4SvFbH_G~6Tife$+`dC|B!6UauC(aSJ z!Bx^S zxB1foUz4vPGsT;jDs;PZ5kM*V1;1DvgY7`IX^_+eZ9*14YgxLo;N?FF1I%Fj5CD#wz6bBuza_5)rN&1jF#f2Q2D$O&X{LaP=jHR^$m%3= zIg2gA=@ICG5Rc^~CRpTsN^R0Uj*;Qjy*NPt`E%`tWtPIu`;v?p)x(iT50iWF4eJ6518 zlyMv5dvzBUlc`h4TFI z0s8KT#iv~FJav)U2+qnV)3@JKp>?|Jl@2SUYZTPSfPn-`5NRlWCK!%u*DB%)>?a%2P>a_GxJ?MYrZ=2k@fD^ZOTX_98DY}#!51_73;L;rX zq6f3fs1iGW&oblY84#lA)+(FStU~aB#1Uhj-3nYOef8LBJLZ?8hHz=a(0;~t1`6nC z9ct5+XN|AHy$pmH<@dWr;B`Y;Kp8)tV2#=}1_??lV2(!6o%nQ$ZmfbGI++7x0#3R( z0ECV>G316=H0PolpXE%GlWljS4sP8rh8JS-o7gTEFmcgB;S<$*w=mQAo1bE@fNmv+ zQL)GKCktrOlf_aJ!r-p9eEOqS0Xf?v!%o&+Gt%LP;G$i;lP2-2`rX-`?_osW-H7W3 z)vT<6J^P|BAN}acQc%Cg3yYC$y_B(qNnwS%k9zP{z&sATjh-iGfzvAowOaou8lf33 z(l_4x7QM%NPlGifg>>!@OqnkJaZ2)8bk@=;|2yWpxL*(dJqy53H$p#{j;cBiX|cy1 zOmFhH?(z1Z6QuAf2!mP0kx|aoK>W~ftn4HD_G9q#Fw6t`(d<~p`URr9@s?vP9jCr> z-S3TUlO9nzW~BHgrL{=d{?XR(D@=xol)pHzsF1-X0mXhYLeHBuKpA(%K?t)Tj&l;@ zKtSq04at*%JS>n8=80%^p2$%6x)wc%68t${dJzc_iC5))`pizUE;=9u#g7Hae*?oC zHe^?wUIyeyJRf6g>4mz*jB%b=LgnaRnT1yMcbYK<#EPuytFh9EessU-!&jW;N*;3` zO0k{}VGChIj-HdF8e)-!yKI|B0)Ni1@3=T*?gPGixsZ;=)9|vdHg^11aU-uP|8e#E zrRCFf#mwHU-cI%Nnbh}KowI>KMzB-cBNxMGy1=2pFp3cqbeiGVUX4Af{L z7Q?hEa_w^7)OaHI+~lHPPx@`99AUu{Y<-8oG{@Y8@tCvQi%8CEqL$@)+x8Mjfw&IA zdQ+U}2lE9qDc`Y-YF@Go(PwQ-hMZsVSSQ#pjOsaPepUs?(*(#a*t0W)Z7(E&`4t$m zd%?V_F?sCoUM5}~V1CE6s*hibLr9_fOe{{b0tx5SF}k6el}z1uTIHFb@F)$>pQZk(m_qjTkQ!*^zLfokiSgcm~&ortvX z){)MyK4{&%ZD;V10pkQuOLqk?ti~SK!=K!oMl}pr{YCu4@JphcS^ID!wdq#Zu!pdy z*H^21=56x{^?|cG9c+Q3j5&Aa(!xD0wzsi(3>o-|*4{;Mjv+?FNZ+2>o^4R)JXLz{ z2#5FMB^(A8YF^s4@`}$Ruks+BFHJ5K5w7_c(;+aa%`~_gu35OPLDVV8;B(%@ry&&T zo~B1B%sF>U`o4tc)Pje%`X?J-+gSdc0kE5%_zIQ@6MVmK)S+r%pjCH-w*2)}JnynbuQ1;QsPhdf@ zGQKV^J9FCu%&4G&F1mNUS3DlurW5OzyC)_?XZ(i@eKcFS#Dci}I@f~ZO!~*-mp-|Y zienGK0mRrF#J?eJ&0@5wGg{jjFJAz1q7L4;xoGDnw|;S+n*B7k^}IQ#*t+PWx_tce z?>;m+YBIMqR8>66cXNgO#>e=aSD-cfJ3i~;#Q9qv=gWHo%d^7)-?&F||`~nqw8uxm@Wv&bTc~e*8})lX0>)c;F-70uz3#!W`G`cS>-AcqqcWF!h`2xe?%hCWB2x)xe?ALKF;K|vnO;DAwQy0L{8Fu zUIPmz78bK-b~a2=d!=XAsG6=AFMjbIjqinQIsZRe_dsJWX~s#c1&@&Z76SLw50;BA zc<|76w)ET!3J~)wtAL0} zuOoMeF~8s|m)s?0oPCqAEZ=j6-JWqSw{p`iAA0Qx5=sray;OBQHUV)IP}!?_xiMsi zO1-R+;#t(=Z1BjG<5i%ht5|*A`0qRT)MF34Qc?C4agSMfWMs-3E5g$GDzVvOZrcry z6rE6grPnh8`adZTg0BdTq2H=Zc*kCo(49Le%cIHWJ5S0m5bIF81i#@xGCh&nm9}da z2kg486C3o31YijD1;DTxxWNZ>6)&_b@l2%hfZWRnpB=k+FacgOM(M%#|5au!W9SZ} z`crnK_yWe1iY@inG&QgBqm0-x^Ib-cblwAA5S6^GsYnJ7Cdw;*GBgzhc^waCBc@uh z;}33+N(Fus<+z4z!sbh^>@boq<9|Btn>`Z)mEP-T@wh}=F-BzL8)S9h9Byyt8GjEzDiFm&K~BOY`;u9QBJpD|1YG>zO#j) zDN!$`G;@A*pQ5@ig*g(Mqhgyu8N<3t5A3w7qM{ttI4hKnG*FCGcE62Z4A9*S(rOYB`($l%d0jU%5dgCY-kKif*m$~=?gRX ztWx80t|)qtRK2n_jM;Lwq12cEpkziK(2qtqv&kbK>_xoF=Q$c{#?s2gbE$mOG9$6% zl$hjW)4%e`PtSHgmz3l&I(X>?$KfIFgGB?j!Y5x|JL_`$y%?J-TjJhFiC@p|t=sr9 z_(PlOAJR1zNzEG7qAq6)s&%P#O@*&iV#aA5)aVu3t!5h8fxT=d8Etwk*}l8VXKrQn zM(~Vh&mI^IW{uh!xkOpbv53A=GAYZjiI|eSnHeDt<&|gt3{+P|q`o_T~s$s2%bP?@t znPB;hH)k2vdDa+G83(@#fE_eIa2`xn)h52+w6J zsSYm;#wyiY&1r8I=1!pZZFh?;kM{#kMNQ3Xb2--;z*^W`k>49%KmPe}_hsR<+*vup zmRZ|do(Mxx%0RzWxenQ~v8i=DE~airgudG+1fF8|jx8^a3;1?zC6fZ!?|ukg^dc~J zIqm36#+=npo2h6fLBM5mD2 z(K>+Co)OrFP4FD=*eW;#)0YOLw_p}(C7T#$M1fi{KpeY-NWG4XpM zKE@!mOuKGsn>JRt;6`k=gR1*@8cKy?bqLx{E{Ut5yt3bF%l!|n4K3@DUauFxw@t=* zkL=uB4e1NXk>C_6H)X&CK6P$6vGBn=RO$W*+4r+(N1}?EQK)+#v z=Mev^O@glx_W6H_&|BU>o8Eq+mRFw-e6)JP-uZH&iAZRvI+rSkkw9r>X|*>?zpe5^ zFX>D-ukvwb!Oe?I=%8-Y0oA?SVS|1u7o&4@!eQPS3YOV0A&F4$ihK56gNk6)E9Me) zy7YJGh%Hpwz_kSM=feE+s7lN1JyOf7q+f((f|3-Tk$3qwsfRR3NU+ReJvo6!@mX$R zB0eVuA`BZ})jKU0lb-TS(I8`@)z>;zEQj7Pq>G@-BkCo(-A{DO;jEE_SLu9d;7EMmz|qyr~`-}3r6hoE8=L= zJ=Pqxpzj6${x9qIKdkzHW+e1Ng^!NQfm_Auwj0ZUQO3HyxBsEiREtoHT8w@~c z6n?jCFS%T=!Q(xtUK84tairO! z&{fmb2ng%{&c*Rl9wAq8Yo%J&cPM(iidv*+(d9KnE=@l`McF&qX!V z>{-#LCUP>Q&0jyKHqd-lDwesWV@@09!Gle1OfaG2Wghhtw1?f}$f!Om)8v=pYdjK??{q4QEf8(1ARu?5oP14@o8_!}Gy5dyyMUJq13L+l&)Vs)^0xB9n{~ zUzDB%zvgT|R#$V?Xu7HTJ03Ytc5DpfrheKu2Zs&VCkR;LwQU{7@qvh0p-N*@zoCLu zON#IG@s{X=<2S><(=S@3PVgOEWTk!H*{LA>YVS&zQSeyS0INm~oDG(BTYL1YNBZ(= z#pO8*cHsmKG_6B57cWoy9yT<8a!Pq!!f!;pX;|bZ%hI}kn~Kp)7{^#7#l_LT!TySk z`&zkoMt|_FE3)^S?Uz~wywkIrg7>I87E*o>)R+8zMIxllqcch;SKr4_wFzqsYey+s689$+v6*~?!nD}cUD$hU&=%Ey4s%C=M4 zXE7xa_REoZ<6DNy8EJSX(-E4{FeiFUQ)0zGxb+&1I*EH99bj_37a+t5Um+hS$Bh-4 z#UJ78es>wQAgxnG{`hhg_yzqlP7WV~EgAjPE0|5(fE zq%A?_GYXiZ7&yu$c}X%q1Q9bykXD}m@H+3E)trGN40}QsU`XJbh|u1UzwZbI47pQT z1+8zXCeh>MdnUsRQdC)`Rn5{OA@jBJ;>@Isn$M}`)FJW7Ia0ypktnLPhOqfh(mE&cKN;={XG(Y*D^=r-bOpgXhp|x zHL|n_M*GnvxW?RUHd?q=NirnZ36OKbt}QDN_)I2Z%3X#eV6ka#e;8&bON23}Ru(nM zHMei61#30_onO4D5yHh|%?Q9vGRnG-&~KURvAMi#15h5O`XDI9M#ZkSN$O1bKAAVA zrDKG0f5Nz8an^=UU1ZWS5x^^m5p@mp_ax#tN_+6qLgUK_J%jQ8XAPkGRmmq-}FO7cDs*}lQ60L)dII|26 z%AJ)!d7=G2SKWlzEccV~K7L#zdok?%a(XxA;`4x<7Q)32wXSXwp5zgDGn{gSEP*P^ z!gZr9%%nWOYCmS zE{J|pAH==XcU07AiM63jK$zAO5-m&au4o-JBEuCny?wp-|2B@!4C4a_IpnwL?zjJ1 z1*d*g3n&csejgNxp#C8#m>7lP?Gz^F3VLPMCplawxy-$UivPLoC8$y@JezLa%%o&j@ML{yFF3M>*Hek7uxKZ zm|P{6u$(llCUAX>a}c>r#y_V&WkPnW#&3PF!|uU6BJUl=iKs>gGgXu5`OW}~oflCW zil)d^YYi6zZbVFuq#p+@B|`KXpV9w4Xk-nllU0&iKXl4%)sz*O+FPikhXV zpEuvObqTzWT>44L^`dsYi#Hst$)P?UUh#=ij;Ux@`*mp0IhDZ;58quPcoPcAcit~vINW!XuE5|QhsHQGM{ zC(oEt5;423xKcc8V(5x8WJr3ndnWfWL&Zvo>`KB(KMyRTLWvq*I+H7MB`)sv3vg z?U%dG498Rv10mbNr2NYYl3W^no((MC_8#W5(QvP#9ALk~*0Hn}Z}>jCWJVKfSHt^T z-8O0?EAZChadNQ6+_>$v`NlweMR7w+a8S;Cnfn~;nE+Y4iAANzht)}E+U)z+i&XKV zt{4u%Pu_jKbl`y1evkmIe!1k@=V_!5{AjY6WtKZh#nL z92*v3sTLK`Vw5cUrmzFJ66IY@{+BVTJiZWCo3+)VO9 zZ=D*7iENqfng7T*mPc?$xm!I`>ENVgvm17lZ0M-|2$r@bI-D6xK-J!N9UGKeTipax z10$8DmpLULFp zuBGN$5lhs|UWPRf|IO{6^AOsZ1vr}sqeO<~y5`!@8iKxqTeSo&fy5UWp0HZYau-tE ztiYLuF`LG+i0dsA&P%)(haFEh6tDe_S976wAHSwu=CVl)PbtJ=?l*Xaah7?fuS|T5 z?`{jdaC5VW^u05efqE@vyabE+l}IWSJR=QM_BO(+4Frl(8w Hop1j)uRSnT diff --git a/docs/reference/AddHealth-2.png b/docs/reference/AddHealth-2.png index c7eae6cad417e08809ab5be2451051c326e9494b..bda6f4b5fcca89d3edf51bb47878315458901489 100644 GIT binary patch literal 50030 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 m;YLjVXT$#=%DP|6)m@?{KFu`G-d*@ Adolescent Health Data — AddHealth • heplotsAdolescent Mental Health Data — AddHealth • heplots@c^>i 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 literal 60169 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

w<))25~|Y@j&x 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 diff --git a/docs/reference/index.html b/docs/reference/index.html index 951b0421..eef1f5e0 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -290,7 +290,7 @@

Data setsAddHealth -
Adolescent Health Data
+
Adolescent Mental Health Data
Adopted diff --git a/docs/reference/interpPlot.html b/docs/reference/interpPlot.html index 77eaba75..e22047c9 100644 --- a/docs/reference/interpPlot.html +++ b/docs/reference/interpPlot.html @@ -309,8 +309,8 @@

Examples interpPlot(XY, scores, alp, pch=16, main = main(alp), - xlab = xlab(alp), - ylab = ylab(alp), + xlab = xlab(alp), + ylab = ylab(alp), ellipse=TRUE, ellipse.args=(list(levels=0.68, fill=TRUE, fill.alpha=(1-alp)/2)), abline=TRUE, id.n=2, id.cex=1.2, cex.lab=1.25, segments=TRUE) Sys.sleep(1) diff --git a/docs/search.json b/docs/search.json index e4568e85..8b808165 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -[{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"multivariate-analysis-of-variance-designs","dir":"Articles","previous_headings":"","what":"Multivariate Analysis of Variance Designs","title":"HE plot MANOVA Examples","text":"vignette provides worked examples analysis multivariate linear models (MLMs) MANOVA designs predictors factors, goal determine group means differ several response variables relation factors possible interactions. Graphical methods visualizing results using heplots candisc packages illustrated. emphasis using methods R, understanding help reveal aspects models might apparent graphical displays. attempt made describe theory MLMs statistical details behind plots reduced-rank canonical cousins. , see Fox, Friendly, & Monette (2009); Friendly (2007); Friendly (2006).","code":""},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"adolescent-mental-health-data","dir":"Articles","previous_headings":"","what":"Adolescent Mental Health Data","title":"HE plot MANOVA Examples","text":"simple example one-way MANOVA design quantitative factor. dataset, AddHealth, contains large cross-sectional sample participants grades 7–12 National Longitudinal Study Adolescent Health, described Warne (2014). contains responses two Likert-scale (1–5) items, anxiety depression. grade ordered factor, means default contrasts taken orthogonal polynomials linear (grade.L), quadratic (grade.Q), 5th degree (grade^5) trends, decompose total effect grade. research questions : means anxiety depression vary separately grade? evidence linear nonlinear trends? anxiety depression vary jointly grade? association anxiety depression vary age? first question can answered fitting separate linear models response (e.g., lm(anxiety ~ grade))). However second question interesting considers two responses together takes correlation account. fit MLM: \\[ \\mathbf{y} = \\boldsymbol{\\beta}_0 + \\boldsymbol{\\beta}_1 x + \\boldsymbol{\\beta}_2 x^2 + \\cdots \\boldsymbol{\\beta}_5 x^5 \\tag{1.1} \\] , \\[ \\begin{eqnarray*} \\begin{bmatrix} y_{\\text{anx}} \\\\y_{\\text{dep}} \\end{bmatrix} & = & \\begin{bmatrix} \\beta_{0,\\text{anx}} \\\\ \\beta_{0,\\text{dep}} \\end{bmatrix} + \\begin{bmatrix} \\beta_{1,\\text{anx}} \\\\ \\beta_{1,\\text{dep}} \\end{bmatrix} \\text{grade} + \\begin{bmatrix} \\beta_{2,\\text{anx}} \\\\ \\beta_{2,\\text{dep}} \\end{bmatrix} \\text{grade}^2 + \\cdots \\begin{bmatrix} \\beta_{5,\\text{anx}} \\\\ \\beta_{5,\\text{dep}} \\end{bmatrix} \\text{grade}^5 \\end{eqnarray*} \\] Using lm() get coefficients polynomial terms grade:","code":"data(AddHealth, package=\"heplots\") str(AddHealth) #> 'data.frame': 4344 obs. of 3 variables: #> $ grade : Ord.factor w/ 6 levels \"7\"<\"8\"<\"9\"<\"10\"<..: 5 4 6 1 2 2 2 3 3 3 ... #> $ depression: int 0 0 0 0 0 0 0 0 1 2 ... #> $ anxiety : int 0 0 0 1 1 0 0 1 1 0 ... lm(cbind(anxiety, depression) ~ grade, data=AddHealth) #> #> Call: #> lm(formula = cbind(anxiety, depression) ~ grade, data = AddHealth) #> #> Coefficients: #> anxiety depression #> (Intercept) 0.94286 1.18437 #> grade.L 0.32072 0.38917 #> grade.Q -0.02662 -0.12256 #> grade.C -0.03979 -0.00952 #> grade^4 -0.02458 -0.04024 #> grade^5 -0.06263 -0.00239"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"exploratory-plots","dir":"Articles","previous_headings":"1 Adolescent Mental Health Data","what":"Exploratory plots","title":"HE plot MANOVA Examples","text":"exploratory analysis useful fitting visualizing models. first step, find means, standard deviations, standard errors means: Now, plot means \\(\\pm 1\\) error bars. appears average level depression anxiety increase steadily grade, except grades 11 12 don’t differ much. Figure 1.1: Means anxiety depression grade, \\(\\pm 1\\) standard error bars. Treating anxiety depression multivariate outcomes, can also plot bivariate means. Figure 1.2: Joint plot means anxiety depression grade, \\(\\pm 1\\) standard error bars. can examine within-group correlations using covEllipses(). variability scores large compared range means, show data ellipses coverage 10%. Figure 1.3: Within-group covariance ellipses grade groups.","code":"library(ggplot2) library(dplyr) library(patchwork) means <- AddHealth |> group_by(grade) |> summarise( n = n(), dep_sd = sd(depression, na.rm = TRUE), anx_sd = sd(anxiety, na.rm = TRUE), dep_se = dep_sd / sqrt(n), anx_se = anx_sd / sqrt(n), depression = mean(depression), anxiety = mean(anxiety) ) |> relocate(depression, anxiety, .after = grade) |> print() #> # A tibble: 6 × 8 #> grade depression anxiety n dep_sd anx_sd dep_se anx_se #> #> 1 7 0.881 0.751 622 1.11 1.05 0.0447 0.0420 #> 2 8 1.08 0.804 664 1.19 1.06 0.0461 0.0411 #> 3 9 1.17 0.934 778 1.19 1.08 0.0426 0.0387 #> 4 10 1.27 0.956 817 1.23 1.11 0.0431 0.0388 #> 5 11 1.37 1.12 790 1.20 1.16 0.0428 0.0411 #> 6 12 1.34 1.10 673 1.14 1.11 0.0439 0.0426 p1 <-ggplot(data = means, aes(x = grade, y = anxiety)) + geom_point(size = 4) + geom_line(aes(group = 1), linewidth = 1.2) + geom_errorbar(aes(ymin = anxiety - anx_se, ymax = anxiety + anx_se), width = .2) + theme_bw(base_size = 15) p2 <-ggplot(data = means, aes(x = grade, y = depression)) + geom_point(size = 4) + geom_line(aes(group = 1), linewidth = 1.2) + geom_errorbar(aes(ymin = depression - dep_se, ymax = depression + dep_se), width = .2) + theme_bw(base_size = 15) p1 + p2 ggplot(data = means, aes(x = anxiety, y = depression, color = grade)) + geom_point(size = 3) + geom_errorbarh(aes(xmin = anxiety - anx_se, xmax = anxiety + anx_se)) + geom_errorbar(aes(ymin = depression - dep_se, ymax = depression + dep_se)) + geom_line(aes(group = 1), linewidth = 1.5) + geom_label(aes(label = grade), nudge_x = -0.015, nudge_y = 0.02) + scale_color_discrete(guide = \"none\") + theme_bw(base_size = 15) covEllipses(AddHealth[, 3:2], group = AddHealth$grade, pooled = FALSE, level = 0.1, center.cex = 2.5, cex = 1.5, cex.lab = 1.5, fill = TRUE, fill.alpha = 0.05)"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"fit-the-mlm","dir":"Articles","previous_headings":"1 Adolescent Mental Health Data","what":"Fit the MLM","title":"HE plot MANOVA Examples","text":"Now, let’s fit MLM responses jointly relation grade. null hypothesis means anxiety depression six grades, \\[ H_0 : \\mathbf{\\mu}_7 = \\mathbf{\\mu}_8 = \\cdots = \\mathbf{\\mu}_{12} \\; , \\] equivalently, coefficients except intercept model (1.1) zero, \\[ H_0 : \\boldsymbol{\\beta}_1 = \\boldsymbol{\\beta}_2 = \\cdots = \\boldsymbol{\\beta}_5 = \\boldsymbol{0} \\; . \\] overall test, 5 degrees freedom diffuse, can rejected pair means differ. car::Anova() gives simple display multivariate test, using Pillai trace criterion. summary() method gives four test statistics.","code":"AH.mlm <- lm(cbind(anxiety, depression) ~ grade, data = AddHealth) # overall test of `grade` Anova(AH.mlm) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> grade 5 0.0224 9.83 10 8676 <2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## show separate multivariate tests summary(Anova(AH.mlm)) |> print(SSP = FALSE) #> #> Type II MANOVA Tests: #> #> ------------------------------------------ #> #> Term: grade #> #> Multivariate Tests: grade #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 5 0.02242 9.8340 10 8676 < 2.2e-16 *** #> Wilks 5 0.97762 9.8726 10 8674 < 2.2e-16 *** #> Hotelling-Lawley 5 0.02286 9.9112 10 8672 < 2.2e-16 *** #> Roy 5 0.02119 18.3878 5 4338 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"testing-linear-hypotheses","dir":"Articles","previous_headings":"1 Adolescent Mental Health Data","what":"Testing linear hypotheses","title":"HE plot MANOVA Examples","text":"Given grade ordered factor, makes sense examine narrower hypotheses linear nonlinear trends. car::linearHypothesis() provides general way , giving multivariate tests one linear combinations coefficients. joint test linear coefficients anxiety depression, \\(H_0 : \\boldsymbol{\\beta}_1 = \\boldsymbol{0}\\) highly significant, test quadratic coefficients \\(H_0 : \\boldsymbol{\\beta}_2 = \\boldsymbol{0}\\) indicates significant curvature trends across grade, saw plots means, Figures 1.1 1.2. can also test hypothesis higher order terms beyond quadratic zero, H_0 : _3 = _4 = _5 = $:","code":"## linear effect linearHypothesis(AH.mlm, \"grade.L\") |> print(SSP = FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.01921 42.479 2 4337 < 2.2e-16 *** #> Wilks 1 0.98079 42.479 2 4337 < 2.2e-16 *** #> Hotelling-Lawley 1 0.01959 42.479 2 4337 < 2.2e-16 *** #> Roy 1 0.01959 42.479 2 4337 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## quadratic effect linearHypothesis(AH.mlm, \"grade.Q\") |> print(SSP = FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.00195 4.2421 2 4337 0.01444 * #> Wilks 1 0.99805 4.2421 2 4337 0.01444 * #> Hotelling-Lawley 1 0.00196 4.2421 2 4337 0.01444 * #> Roy 1 0.00196 4.2421 2 4337 0.01444 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## joint test of all higher terms linearHypothesis(AH.mlm, rownames(coef(AH.mlm))[3:5]) |> print(SSP = FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 3 0.00235 1.7021 6 8676 0.11612 #> Wilks 3 0.99765 1.7023 6 8674 0.11608 #> Hotelling-Lawley 3 0.00236 1.7025 6 8672 0.11604 #> Roy 3 0.00206 2.9797 3 4338 0.03022 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"he-plot","dir":"Articles","previous_headings":"1 Adolescent Mental Health Data","what":"HE plot","title":"HE plot MANOVA Examples","text":"Figure 1.4 shows plot problem. H ellipse grade effect reflects increasing pattern means across grades: depression increases along anxiety. error E ellipse reflects pooled -group covariance, weighted average shown @ref{fig-addhealth-covellipse}. can include linear hypotheses contrasts using hypotheses argument. H ellipses 1 df linear quadratic terms plot lines. linear effect corresponds major axis H ellipse grade effect. , preserve resolution plot, show H E ellipses 10% coverage, relative size H ellipse relative E matters: default significance scaling, effect significant iff corresponding H ellipse projects anywhere outside E ellipse. Figure 1.4: plot multivariate model AH.mlm, showing overall effect grade well tests linear quadratic terms model.","code":"heplot(AH.mlm, hypotheses = c(\"grade.L\", \"grade.Q\"), hyp.labels = c(\"linear\", \"quad\"), label.pos = c(4, 3, 1, 1), fill=c(TRUE, FALSE), level = 0.1, cex.lab = 1.5)"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"plastic-film-data","dir":"Articles","previous_headings":"","what":"Plastic film data","title":"HE plot MANOVA Examples","text":"experiment conducted determine optimum conditions extruding plastic film. Three responses, tear resistance, film gloss film opacity measured relation two factors, rate extrusion amount additive, set two values, High Low. data set comes Johnson & Wichern (1992). design thus \\(2\\times 2\\) MANOVA, \\(n=5\\) per cell 3 numeric response variables. effects factors responses likely correlated, useful consider multivariate analysis, rather 3 separate univariate ones. example illustrates: 2D 3D plots, difference “effect” scaling “evidence” (significance) scaling, visualizing composite linear hypotheses.","code":"data(Plastic, package=\"heplots\") str(Plastic) #> 'data.frame': 20 obs. of 5 variables: #> $ tear : num 6.5 6.2 5.8 6.5 6.5 6.9 7.2 6.9 6.1 6.3 ... #> $ gloss : num 9.5 9.9 9.6 9.6 9.2 9.1 10 9.9 9.5 9.4 ... #> $ opacity : num 4.4 6.4 3 4.1 0.8 5.7 2 3.9 1.9 5.7 ... #> $ rate : Factor w/ 2 levels \"Low\",\"High\": 1 1 1 1 1 1 1 1 1 1 ... #> $ additive: Factor w/ 2 levels \"Low\",\"High\": 1 1 1 1 1 2 2 2 2 2 ..."},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"multivariate-tests","dir":"Articles","previous_headings":"2 Plastic film data","what":"Multivariate tests","title":"HE plot MANOVA Examples","text":"begin overall MANOVA two-way MANOVA model. analyses, use car::Anova() significance tests rather stats::anova(), provides -called “Type ” (sequential) tests terms linear models. example, effect 1 df, multivariate statistics (Roy’s maximum root test, Pillai Hotelling trace criteria, Wilks’ Lambda) equivalent, give \\(F\\) statistics \\(p\\)-values. specify test.statistic=\"Roy\" emphasize Roy’s test natural visual interpretation plots. three responses jointly, main effects rate additive significant, interaction . approaches testing effects multivariate linear models (MLMs), significant multivariate tests often followed univariate tests responses separately determine responses contribute significant effect. R, univariate analyses conveniently performed using update() method mlm object plastic.mod, re-fits model single outcome variable. results show significant main effects tear, significant main effect rate gloss, significant effects opacity, don’t shed light nature effects. Traditional univariate plots means variable separately useful, don’t allow visualization relations among response variables.","code":"plastic.mod <- lm(cbind(tear, gloss, opacity) ~ rate*additive, data=Plastic) Anova(plastic.mod, test.statistic=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> rate 1 1.619 7.55 3 14 0.003 ** #> additive 1 0.912 4.26 3 14 0.025 * #> rate:additive 1 0.287 1.34 3 14 0.302 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Anova(update(plastic.mod, tear ~ .)) #> Anova Table (Type II tests) #> #> Response: tear #> Sum Sq Df F value Pr(>F) #> rate 1.74 1 15.8 0.0011 ** #> additive 0.76 1 6.9 0.0183 * #> rate:additive 0.00 1 0.0 0.9471 #> Residuals 1.76 16 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Anova(update(plastic.mod, gloss ~ .)) #> Anova Table (Type II tests) #> #> Response: gloss #> Sum Sq Df F value Pr(>F) #> rate 1.301 1 7.92 0.012 * #> additive 0.612 1 3.73 0.071 . #> rate:additive 0.544 1 3.32 0.087 . #> Residuals 2.628 16 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Anova(update(plastic.mod, opacity ~ .)) #> Anova Table (Type II tests) #> #> Response: opacity #> Sum Sq Df F value Pr(>F) #> rate 0.4 1 0.10 0.75 #> additive 4.9 1 1.21 0.29 #> rate:additive 4.0 1 0.98 0.34 #> Residuals 64.9 16"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"he-plots","dir":"Articles","previous_headings":"2 Plastic film data","what":"HE plots","title":"HE plot MANOVA Examples","text":"can visualize effects pairs variables plot, showing “size” orientation hypothesis variation (\\(\\mathbf{H}\\)) relation error variation (\\(\\mathbf{E}\\)) ellipsoids. , , model terms 1 degree freedom, \\(\\mathbf{H}\\) ellipsoids degenerate line. plots, \\(\\mathbf{H}\\) ellipses can scaled relative \\(\\mathbf{E}\\) show significance effects (size=\"evidence\"), effect size (size=\"effect\"). former case, model term significant (using Roy’s maximum root test) iff \\(\\mathbf{H}\\) projects anywhere outside \\(\\mathbf{E}\\) ellipse. plot overlays scaling, using thicker lines effect scaling. Figure 2.1: plot effects tear gloss according factors rate, additive interaction, rate:additive. thicker lines show effect size scaling; thinner lines show significance scaling. interpretation can easily read plot, least two response variables (tear gloss) shown bivariate view. effect rate extrusion highly significant: high rate shows greater tear compared low rate. effect amount additive significant view, high level additive greater tear gloss. effect scaling, \\(\\mathbf{H}\\) \\(\\mathbf{E}\\) sums squares products matrices divided error df, giving multivariate analogs univariate measures effect size, e.g., \\((\\bar{y}_1-\\bar{y}_2) / s\\). significance scaling, \\(\\mathbf{H}\\) ellipse divided \\(\\lambda_\\alpha\\), critical value Roy’s largest root statistic. scaling property \\(\\mathbf{H}\\) ellipse protrude somewhere outside \\(\\mathbf{E}\\) ellipse iff multivariate test significant level \\(\\alpha\\). Figure 2.2 shows scalings, using thinner line significance scaling. Note (degenerate) ellipse additive significant, protrude outside \\(\\mathbf{E}\\) ellipse view. guaranteed protrude somewhere 3D space responses. design, means levels interaction terms shown plot, general can lead messy displays. can add term rate:additive follows: Figure 2.2: plot effects tear gloss according factors rate, additive interaction, rate:additive. Annotations added means combinations rate additive. factor means plot (Figure 2.2 simple interpretation: high rate level yields greater tear resistance lower gloss low level. high additive amount produces greater tear resistance greater gloss. rate:additive interaction significant overall, though approaches significance gloss. cell means combinations rate additive shown figure suggest explanation, tutorial purposes: low level rate, little difference gloss levels additive. high level rate, larger difference gloss. \\(\\mathbf{H}\\) ellipse interaction rate:additive therefore “points” direction gloss indicating variable contributes interaction multivariate tests. MANOVA models, interest test sub-hypotheses given main effect interaction, conversely test composite hypotheses pool together certain effects test jointly. tests (, indeed, tests terms given model) carried tests general linear hypotheses MLM. example, might useful test two composite hypotheses: one corresponding main effects jointly, another corresponding difference among means four groups (equivalent joint test overall model). tests specified terms subsets linear combinations model parameters. Thus, example, joint test main effects tests parameters rateHigh additiveHigh. Correspondingly, can display tests plot specifying tests hypothesis argument heplot(), shown Figure 2.3. Figure 2.3: plot tear gloss, supplemented ellipses representing joint tests main effects group differences Finally, 3D plot can produced heplot3d(), giving Figure 2.4. plot rotated interactively view shows main effects protruding outside error ellipsoid. Figure 2.4: 3D plot plastic MLM","code":"## Compare evidence and effect scaling colors = c(\"red\", \"darkblue\", \"darkgreen\", \"brown\") heplot(plastic.mod, size=\"evidence\", col=colors, cex=1.25, fill=TRUE, fill.alpha=0.1) heplot(plastic.mod, size=\"effect\", add=TRUE, lwd=5, term.labels=FALSE, col=colors) # Compare evidence and effect scaling colors = c(\"red\", \"darkblue\", \"darkgreen\", \"brown\") heplot(plastic.mod, size=\"evidence\", col=colors, cex=1.25, fill=TRUE, fill.alpha=0.05) heplot(plastic.mod, size=\"effect\", add=TRUE, lwd=5, term.labels=FALSE, col=colors) ## add interaction means intMeans <- termMeans(plastic.mod, 'rate:additive', abbrev.levels=2) points(intMeans[,1], intMeans[,2], pch=18, cex=1.2, col=\"brown\") text(intMeans[,1], intMeans[,2], rownames(intMeans), adj=c(0.5, 1), col=\"brown\") lines(intMeans[c(1,3),1], intMeans[c(1,3),2], col=\"brown\") lines(intMeans[c(2,4),1], intMeans[c(2,4),2], col=\"brown\") plastic.mod #> #> Call: #> lm(formula = cbind(tear, gloss, opacity) ~ rate * additive, data = Plastic) #> #> Coefficients: #> tear gloss opacity #> (Intercept) 6.30 9.56 3.74 #> rateHigh 0.58 -0.84 -0.60 #> additiveHigh 0.38 0.02 0.10 #> rateHigh:additiveHigh 0.02 0.66 1.78 linearHypothesis(plastic.mod, c(\"rateHigh\", \"additiveHigh\"), title=\"Main effects\") |> print(SSP=FALSE) #> #> Multivariate Tests: Main effects #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 0.71161 2.7616 6 30 0.029394 * #> Wilks 2 0.37410 2.9632 6 28 0.022839 * #> Hotelling-Lawley 2 1.44400 3.1287 6 26 0.019176 * #> Roy 2 1.26253 6.3127 3 15 0.005542 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 linearHypothesis(plastic.mod, c(\"rateHigh\", \"additiveHigh\", \"rateHigh:additiveHigh\"), title=\"Groups\") |> print(SSP=FALSE) #> #> Multivariate Tests: Groups #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 3 1.14560 3.2948 9 48.000 0.003350 ** #> Wilks 3 0.17802 3.9252 9 34.223 0.001663 ** #> Hotelling-Lawley 3 2.81752 3.9654 9 38.000 0.001245 ** #> Roy 3 1.86960 9.9712 3 16.000 0.000603 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(plastic.mod, hypotheses=list(\"Group\" = c(\"rateHigh\", \"additiveHigh\", \"rateHigh:additiveHigh \")), col=c(colors, \"purple\"), fill = TRUE, fill.alpha = 0.1, lwd=c(2, 3, 3, 3, 2), cex=1.25) heplot(plastic.mod, hypotheses=list(\"Main effects\" = c(\"rateHigh\", \"additiveHigh\")), add=TRUE, col=c(colors, \"darkgreen\"), cex=1.25) colors = c(\"pink\", \"darkblue\", \"darkgreen\", \"brown\") heplot3d(plastic.mod, col=colors)"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"effects-of-physical-attractiveness-on-mock-jury-decisions","dir":"Articles","previous_headings":"","what":"Effects of physical attractiveness on mock jury decisions","title":"HE plot MANOVA Examples","text":"social psychology study influences jury decisions Plaster (1989), male participants (prison inmates) shown picture one three young women. Pilot work indicated one woman beautiful, another average physical attractiveness, third unattractive. Participants rated woman saw twelve attributes scales 1–9. measures used check manipulation “attractiveness” photo. participants told person photo committed Crime, asked rate seriousness crime recommend prison sentence, Years. data contained data frame MockJury.1 Sample sizes roughly balanced independent variables three conditions attractiveness photo, combinations Crime: main questions interest : attractiveness “defendant” influence sentence perceived seriousness crime? attractiveness interact nature crime?","code":"data(MockJury, package = \"heplots\") str(MockJury) #> 'data.frame': 114 obs. of 17 variables: #> $ Attr : Factor w/ 3 levels \"Beautiful\",\"Average\",..: 1 1 1 1 1 1 1 1 1 1 ... #> $ Crime : Factor w/ 2 levels \"Burglary\",\"Swindle\": 1 1 1 1 1 1 1 1 1 1 ... #> $ Years : int 10 3 5 1 7 7 3 7 2 3 ... #> $ Serious : int 8 8 5 3 9 9 4 4 5 2 ... #> $ exciting : int 6 9 3 3 1 1 5 4 4 6 ... #> $ calm : int 9 5 4 6 1 5 6 9 8 8 ... #> $ independent : int 9 9 6 9 5 7 7 2 8 7 ... #> $ sincere : int 8 3 3 8 1 5 6 9 7 5 ... #> $ warm : int 5 5 6 8 8 8 7 6 1 7 ... #> $ phyattr : int 9 9 7 9 8 8 8 5 9 8 ... #> $ sociable : int 9 9 4 9 9 9 7 2 1 9 ... #> $ kind : int 9 4 2 9 4 5 5 9 5 7 ... #> $ intelligent : int 6 9 4 9 7 8 7 9 9 9 ... #> $ strong : int 9 5 5 9 9 9 5 2 7 5 ... #> $ sophisticated: int 9 5 4 9 9 9 6 2 7 6 ... #> $ happy : int 5 5 5 9 8 9 5 2 6 8 ... #> $ ownPA : int 9 7 5 9 7 9 6 5 3 6 ... table(MockJury$Attr) #> #> Beautiful Average Unattractive #> 39 38 37 table(MockJury$Attr, MockJury$Crime) #> #> Burglary Swindle #> Beautiful 21 18 #> Average 18 20 #> Unattractive 20 17"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"manipulation-check","dir":"Articles","previous_headings":"3 Effects of physical attractiveness on mock jury decisions","what":"Manipulation check","title":"HE plot MANOVA Examples","text":"first, check manipulation attractiveness, try assess ratings photos relation presumed categories independent variable Attr. questions : ratings photos physical attractiveness (phyattr) confirm original classification? ratings differentiate photos? keep things simple, consider ratings one-way MANOVA. Note Beautiful baseline category Attr, intercept term gives means level. see means significantly different four variables collectively, joint multivariate test. traditional analysis might follow univariate ANOVAs measure separately. aid interpretation MANOVA results can examine test Attr model plot pairs variables, e.g., phyattr happy (Figure 3.1). means plot show Beautiful rated higher physical attractiveness two photos, Unattractive rated less happy two. Comparing sizes ellipses, differences among group means physical attractiveness contributes significance ratings happy. Figure 3.1: plot ratings phyattr happy according classification photos Attr function pairs.mlm() produces pairwise plots. plot (Figure 3.2) shows means happy independent highly correlated, means phyattr sophisticated. pairwise plots, means form triangle rather line, suggesting attributes indeed measuring different aspects photos. Figure 3.2: plots pairs ratings according classification photos Attr 3 groups 4 variables, \\(\\mathbf{H}\\) ellipsoid \\(s=\\min(df_h, p)=2\\) dimensions. candisc() carries canonical discriminant analysis MLM returns object can used show plot space canonical dimensions. plotted Figure 3.3. heplot.candisc() plot method candisc objects Figure 3.3: Canonical discriminant plot MockJury data. Variable vectors show correlations predictors canonical dimensions. plot, variable vectors determined canonical structure coefficients represent correlations predictor variables canonical variables. Thus, angle near zero axis represents correlation close 1.0; angle near 90\\(^o\\) represent correlation close 0.0. (axes must scaled equal unit lengths angles interpretable.) lengths arrows scaled roughly fill plot, relative length represents overall strength relation variable canonical dimensions. Points represent means canonical scores two dimensions three groups photos. can see 91% variation among group means accounted first dimension, nearly completely aligned phyattr. second dimension, accounting remaining 9% determined nearly entirely ratings happy independent. display gives relatively simple account results MANOVA relations ratings discrimination among photos.","code":"(jury.mod1 <- lm( cbind(phyattr, happy, independent, sophisticated) ~ Attr, data=MockJury)) #> #> Call: #> lm(formula = cbind(phyattr, happy, independent, sophisticated) ~ #> Attr, data = MockJury) #> #> Coefficients: #> phyattr happy independent sophisticated #> (Intercept) 8.282 5.359 6.410 6.077 #> AttrAverage -4.808 0.430 0.537 -1.340 #> AttrUnattractive -5.390 -1.359 -1.410 -1.753 Anova(jury.mod1, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Attr 2 1.77 48.2 4 109 <2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(jury.mod1, main=\"HE plot for manipulation check\", fill = TRUE, fill.alpha = 0.1) pairs(jury.mod1) jury.can <- candisc(jury.mod1) jury.can #> #> Canonical Discriminant Analysis for Attr: #> #> CanRsq Eigenvalue Difference Percent Cumulative #> 1 0.639 1.767 1.6 91.33 91.3 #> 2 0.144 0.168 1.6 8.67 100.0 #> #> Test of H0: The canonical correlations in the #> current row and all that follow are zero #> #> LR test stat approx F numDF denDF Pr(> F) #> 1 0.309 21.53 8 216 < 2e-16 *** #> 2 0.856 6.09 3 109 0.00072 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(jury.can, rev.axes = TRUE, fill = c(TRUE,FALSE), prefix=\"Canonical dimension\", main=\"Canonical HE plot\") #> Vector scale factor set to 8.8177"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"main-analysis","dir":"Articles","previous_headings":"3 Effects of physical attractiveness on mock jury decisions","what":"Main analysis","title":"HE plot MANOVA Examples","text":"Proceeding main questions interest, carry two-way MANOVA responses Years Serious relation independent variables Attr Crime. see nearly significant interaction Attr Crime strong effect Attr. Figure 3.4: plot two-way MANOVA Years Serious plot shows nearly significant interaction Attr:Crime mainly terms differences among groups response Years sentence, little contribution Serious. explore interaction bit detail . main effect Attr also dominated differences among groups Years. assume Years sentence main outcome interest, also makes sense carry step-test variable , controlling rating seriousness (Serious) crime. model jury.mod3 equivalent ANCOVA Years. Thus, even adjusting Serious rating, still significant main effect Attr photo, also hint interaction Attr Crime. coefficient Serious indicates participants awarded 0.84 additional years sentence 1 unit step scale seriousness crime. particularly useful method visualizing fitted effects univariate response models provided effects. default allEffects() calculates predicted values high-order terms given model, plot method produces plots values term. statements produce Figure 3.5. Figure 3.5: Effect plots Serious Attr * Crime interaction ANCOVA model jury.mod3. effect plot Serious shows expected linear relation variable Years. greater interest nature possible interaction Attr Crime Years sentence, controlling Serious. effect plot shows crime Swindle, much greater Years sentence awarded Unattractive defendants.","code":"# influence of Attr of photo and nature of crime on Serious and Years jury.mod2 <- lm( cbind(Serious, Years) ~ Attr * Crime, data=MockJury) Anova(jury.mod2, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Attr 2 0.0756 4.08 2 108 0.020 * #> Crime 1 0.0047 0.25 2 107 0.778 #> Attr:Crime 2 0.0501 2.71 2 108 0.071 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(jury.mod2) # stepdown test (ANCOVA), controlling for Serious jury.mod3 <- lm( Years ~ Serious + Attr * Crime, data=MockJury) t(coef(jury.mod3)) #> (Intercept) Serious AttrAverage AttrUnattractive CrimeSwindle #> [1,] 0.011612 0.83711 0.39586 0.60285 -0.26302 #> AttrAverage:CrimeSwindle AttrUnattractive:CrimeSwindle #> [1,] -0.53701 2.5123 Anova(jury.mod3) #> Anova Table (Type II tests) #> #> Response: Years #> Sum Sq Df F value Pr(>F) #> Serious 379 1 41.14 3.9e-09 *** #> Attr 74 2 4.02 0.021 * #> Crime 4 1 0.43 0.516 #> Attr:Crime 49 2 2.67 0.074 . #> Residuals 987 107 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 library(effects) jury.eff <- allEffects(jury.mod3) plot(jury.eff, ask=FALSE)"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"egyptian-skulls-from-five-epochs","dir":"Articles","previous_headings":"","what":"Egyptian skulls from five epochs","title":"HE plot MANOVA Examples","text":"example examines physical measurements size shape made 150 Egyptian skulls five epochs ranging 4000 BC 150 AD. measures : maximal breadth (mb), basibregmatic height (bh), basialiveolar length (bl), nasal height (nh) skull. See Figure 4.1 diagram. question interest whether measurements change time. Systematic changes time interest indicate interbreeding immigrant populations. Figure 4.1: Diagram skull measurements. Maximal breadth basibregmatic height basic measures “size” skull. Basialveolar length nasal height important anthropometric measures “shape”. Note epoch ordered factor, default contrasts orthogonal polynomials. assumes epoch values equally spaced, . However, examining linear quadratic trends useful first approximation. ease labeling various outputs, useful trim epoch values assign meaningful variable labels. start simple displays means epoch. numbers, means don’t seem vary much. pairs plot, Figure 4.2, joining points epoch somewhat revealing bivariate relations among means. Figure 4.2: Pairs plot means Skulls data, epoch. Perhaps better visualizing trends time set boxplots, joining means epoch. Using bwplot() lattice package requires reshaping data wide long format. following code produces Figure 4.3. Figure 4.3: Boxplots Skulls data, epoch, variable. trend lines aren’t linear, neither random, something systematic going ! Now, fit MANOVA model, test effect epoch car::Anova(). see multivariate means differ substantially. Perhaps greater interest focused tests trends time. based tests coefficients model sk.mod jointly equal zero, subsets (polynomial) contrasts epoch. use linearHypothesis() multivariate test epoch.L linear effect. linear trend highly significant. obvious Figure 4.2 maximal breadth nasal increasing time, two measurements negative slopes. linearHypothesis() can also used test composite hypotheses. test non-linear coefficients jointly. result indicates , collectively, non-linear terms significantly different zero. , plots can show patterns tests multivariate hypotheses. four response variables, easiest look pairwise plots pairs.mlm() function. statement produces Figure 4.4. plot, show hypothesis ellipsoids overall effect epoch, well tests just shown linear trend component epoch.L well joint test non-linear terms. Figure 4.4: Pairs plot Skulls data, showing multivariate tests epoch, well tests linear nonlinear trends. plots interesting geometric interpretation: \\(\\mathbf{H}\\) ellipses overall effect epoch representations additive decomposition effect \\(\\mathbf{H}\\) ellipses linear nonlinear linear hypothesis tests according \\[\\mathbf{H}_{\\textrm{epoch}} = \\mathbf{H}_{\\textrm{linear}} + \\mathbf{H}_{\\textrm{nonlinear}}\\] linear term rank 1 (plots line), nonlinear term rank 3. panel, can seen large direction \\(\\mathbf{H}_{\\textrm{epoch}}\\) leading significance effect corresponds essentially linear contrast. \\(\\mathbf{H}_{\\textrm{nonlinear}}\\) orthogonal complement \\(\\mathbf{H}_{\\textrm{linear}}\\) space \\(\\mathbf{H}_{\\textrm{epoch}}\\), nowhere protrude beyond boundary \\(\\mathbf{E}\\) ellipsoid.","code":"data(Skulls) str(Skulls) #> 'data.frame': 150 obs. of 5 variables: #> $ epoch: Ord.factor w/ 5 levels \"c4000BC\"<\"c3300BC\"<..: 1 1 1 1 1 1 1 1 1 1 ... #> $ mb : num 131 125 131 119 136 138 139 125 131 134 ... #> $ bh : num 138 131 132 132 143 137 130 136 134 134 ... #> $ bl : num 89 92 99 96 100 89 108 93 102 99 ... #> $ nh : num 49 48 50 44 54 56 48 48 51 51 ... table(Skulls$epoch) #> #> c4000BC c3300BC c1850BC c200BC cAD150 #> 30 30 30 30 30 # make shorter labels for epochs Skulls$epoch <- factor(Skulls$epoch, labels=sub(\"c\",\"\",levels(Skulls$epoch))) # assign better variable labels vlab <- c(\"maxBreadth\", \"basibHeight\", \"basialLength\", \"nasalHeight\") means <- aggregate(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls, FUN=mean)[,-1] rownames(means) <- levels(Skulls$epoch) means #> mb bh bl nh #> 4000BC 131.37 133.60 99.167 50.533 #> 3300BC 132.37 132.70 99.067 50.233 #> 1850BC 134.47 133.80 96.033 50.567 #> 200BC 135.50 132.30 94.533 51.967 #> AD150 136.17 130.33 93.500 51.367 pairs(means, vlab, panel = function(x, y) { text(x, y, levels(Skulls$epoch)) lines(x,y) }) library(lattice) library(reshape2) sklong <- melt(Skulls, id=\"epoch\") bwplot(value ~ epoch | variable, data=sklong, scales=\"free\", ylab=\"Variable value\", xlab=\"Epoch\", strip=strip.custom(factor.levels=paste(vlab, \" (\", levels(sklong$variable), \")\", sep=\"\")), panel = function(x,y, ...) { panel.bwplot(x, y, ...) panel.linejoin(x,y, col=\"red\", ...) }) # fit manova model sk.mod <- lm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) Anova(sk.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> epoch 4 0.353 3.51 16 580 4.7e-06 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 coef(sk.mod) #> mb bh bl nh #> (Intercept) 133.97333 132.54667 96.460000 50.93333 #> epoch.L 4.02663 -2.19251 -5.017481 1.07517 #> epoch.Q -0.46325 -1.26504 -0.089087 0.12472 #> epoch.C -0.46380 -0.78003 1.075174 -0.83273 #> epoch^4 0.34263 0.80479 -0.661360 -0.41833 coef(sk.mod)[\"epoch.L\",] #> mb bh bl nh #> 4.0266 -2.1925 -5.0175 1.0752 print(linearHypothesis(sk.mod, \"epoch.L\"), SSP=FALSE) # linear component #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.29138 14.597 4 142 5.195e-10 *** #> Wilks 1 0.70862 14.597 4 142 5.195e-10 *** #> Hotelling-Lawley 1 0.41119 14.597 4 142 5.195e-10 *** #> Roy 1 0.41119 14.597 4 142 5.195e-10 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 print(linearHypothesis(sk.mod, c(\"epoch.Q\", \"epoch.C\", \"epoch^4\")), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 3 0.06819 0.83726 12 432.00 0.6119 #> Wilks 3 0.93296 0.83263 12 375.99 0.6167 #> Hotelling-Lawley 3 0.07063 0.82791 12 422.00 0.6216 #> Roy 3 0.04519 1.62676 4 144.00 0.1707 pairs(sk.mod, variables=c(1,4,2,3), hypotheses=list(Lin=\"epoch.L\", NonLin=c(\"epoch.Q\", \"epoch.C\", \"epoch^4\")), var.labels=vlab[c(1,4,2,3)])"},{"path":[]},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"multivariate-multiple-regression-designs","dir":"Articles","previous_headings":"","what":"Multivariate Multiple Regression Designs","title":"HE plot MMRA Examples","text":"ideas behind plots extend naturally multivariate multiple regression (MMRA) multivariate analysis covariance (MANCOVA). MMRA designs, \\(\\mathbf{X}\\) matrix contains quantitative predictors, MANCOVA designs, contains mixture factors quantitative predictors (covariates), typically just one “group” factor. MANCOVA case, often subtle difference emphasis: true MANCOVA analyses focus differences among groups defined factors, adjusting (controlling ) quantitative covariates. Analyses concerned homogeneity regression focus quantitative predictors attempt test whether regression relations groups defined factors.","code":""},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"rohwer-data-aptitude-and-achievement","dir":"Articles","previous_headings":"","what":"Rohwer data: Aptitude and achievement","title":"HE plot MMRA Examples","text":"illustrate homogeneity regression flavor, use data study Rohwer (given Timm (1975), Ex. 4.3, 4.7, 4.23) kindergarten children, designed determine well set paired-associate (PA) tasks predicted performance measures achievement: Peabody Picture Vocabulary test (PPVT), student achievement test (SAT), Raven Progressive matrices test (Raven). PA tasks considered measures learning aptitude varied stimuli presented, called named (n), still (s), named still (ns), named action (na), sentence still (ss). Two groups tested: group \\(n=37\\) children low socioeconomic status (SES) school, group \\(n=32\\) high SES children upper-class, white residential school. data data frame Rohwer heplots package:","code":"data(Rohwer) Rohwer |> dplyr::sample_n(6) #> group SES SAT PPVT Raven n s ns na ss #> 31 1 Lo 9 63 11 2 12 5 25 14 #> 7 1 Lo 6 71 21 0 1 20 23 18 #> 18 1 Lo 45 54 10 0 6 6 14 16 #> 17 1 Lo 19 66 13 7 12 21 35 27 #> 50 2 Hi 4 87 14 1 4 14 25 19 #> 59 2 Hi 36 89 15 1 6 15 23 28"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"preliminary-plots","dir":"Articles","previous_headings":"1 Rohwer data: Aptitude and achievement","what":"Preliminary plots","title":"HE plot MMRA Examples","text":"fitting models, usually useful data exploration graphing. multivariate multiple regression data, among helpful plots scatterplots response variable, Y, predictor, X, can get better sense relationships adding linear regression lines, loess smooths enhancements. scatterplot matrix, using graphics::pairs() GGally::ggpairs() easy . However, 3 response variables, 4 predictors group factor (SES), can overwhelming. alternative compose rectangular matrix plots Y variables Xs. turned easy might seem, none pairs() methods allow possibility. trick reshape data wide long format use facets ggplot2 compose pairwise scatterplots desired rectangular matrix format.1 , can use ggplot2 make produce pairwise plots combination x y variables. Using color=SES aesthetic results separate regression line two SES groups produced geom_smooth(). Figure 1.1: Plot matrix response variables (SAT, PPVT Raven) three predictors (n, s, ns). lines show separate linear regressions SES group. plots form framework understanding model fits statistical tests turn now.","code":"library(tidyr) library(dplyr) library(ggplot2) yvars <- c(\"SAT\", \"PPVT\", \"Raven\" ) # outcome variables xvars <- c(\"n\", \"s\", \"ns\", \"na\", \"ss\") # predictors xvars <- c(\"n\", \"s\", \"ns\") # make a smaller example Rohwer_long <- Rohwer %>% dplyr::select(-group, -na, -ss) |> tidyr::pivot_longer(cols = all_of(xvars), names_to = \"xvar\", values_to = \"x\") |> tidyr::pivot_longer(cols = all_of(yvars), names_to = \"yvar\", values_to = \"y\") |> dplyr::mutate(xvar = factor(xvar, levels = xvars), yvar = factor(yvar, levels = yvars)) Rohwer_long #> # A tibble: 621 × 5 #> SES xvar x yvar y #> #> 1 Lo n 1 SAT 49 #> 2 Lo n 1 PPVT 48 #> 3 Lo n 1 Raven 8 #> 4 Lo s 2 SAT 49 #> 5 Lo s 2 PPVT 48 #> 6 Lo s 2 Raven 8 #> 7 Lo ns 6 SAT 49 #> 8 Lo ns 6 PPVT 48 #> 9 Lo ns 6 Raven 8 #> 10 Lo n 5 SAT 47 #> # ℹ 611 more rows ggplot(Rohwer_long, aes(x, y, color = SES, shape = SES)) + geom_jitter(size=1.5) + geom_smooth(method = \"lm\", se = FALSE, formula = y ~ x, size=1.5) + facet_grid(yvar ~ xvar, # plot matrix of Y by X scales = \"free\") + theme_bw(base_size = 16) + theme(legend.position = \"bottom\")"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"separate-models","dir":"Articles","previous_headings":"1 Rohwer data: Aptitude and achievement","what":"Separate models","title":"HE plot MMRA Examples","text":"one approach, might tempted fit separate regression models High Low SES groups. approach generally recommended lacks power (smaller sample sizes group combined analysis) allow hypotheses equality slopes intercepts tested directly. fits separate slopes intercepts two groups, difficult compare coefficients numerically. function heplots::coefplot() makes bit easier, plotting bivariate confidence ellipses coefficients multivariate linear model. problem, three response variables, 95% confidence regions 3D ellipsoids, plot 2D. 3D versions property given predictor significant multivariate test ellipsoid excludes point (0, 0, 0). Figure 1.2: Coefficient plots separate models High Low SES groups Rohwer data. ellipses 95% confidence regions pairs regression coefficients (SAT, PPVT) predictor model. Alternatively, can visualize results multivariate tests predictors plots. make use fact several plots can overlaid using option add=TRUE shown Figure 1.3. Figure 1.3: plot SAT PPVT, showing effects PA predictors High Low SES groups separately can readily see difference means two SES groups (Hi greater scores variables) also appears slopes predictor ellipses shallower High Low group, indicating greater relation SAT score.","code":"rohwer.ses1 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, data=Rohwer, subset=SES==\"Hi\") Anova(rohwer.ses1) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> n 1 0.202 2.02 3 24 0.1376 #> s 1 0.310 3.59 3 24 0.0284 * #> ns 1 0.358 4.46 3 24 0.0126 * #> na 1 0.465 6.96 3 24 0.0016 ** #> ss 1 0.089 0.78 3 24 0.5173 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 rohwer.ses2 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, data=Rohwer, subset=SES==\"Lo\") Anova(rohwer.ses2) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> n 1 0.0384 0.39 3 29 0.764 #> s 1 0.1118 1.22 3 29 0.321 #> ns 1 0.2252 2.81 3 29 0.057 . #> na 1 0.2675 3.53 3 29 0.027 * #> ss 1 0.1390 1.56 3 29 0.220 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 coef(rohwer.ses1) #> SAT PPVT Raven #> (Intercept) -28.4675 39.69709 13.24384 #> n 3.2571 0.06728 0.05935 #> s 2.9966 0.36998 0.49244 #> ns -5.8591 -0.37438 -0.16402 #> na 5.6662 1.52301 0.11898 #> ss -0.6227 0.41016 -0.12116 coef(rohwer.ses2) #> SAT PPVT Raven #> (Intercept) 4.15106 33.00577 11.17338 #> n -0.60887 -0.08057 0.21100 #> s -0.05016 -0.72105 0.06457 #> ns -1.73240 -0.29830 0.21358 #> na 0.49456 1.47042 -0.03732 #> ss 2.24772 0.32396 -0.05214 coefplot(rohwer.ses1, fill=TRUE, cex.label=1.5, cex.lab=1.5) text(-10, 3, \"High SES group\", pos=4, cex=1.4) coefplot(rohwer.ses2, fill=TRUE, cex.label=1.5, cex.lab=1.5) text(-4.7, 2.5, \"Low SES group\", pos=4, cex=1.4) heplot(rohwer.ses1, ylim=c(40,110), # allow more room for 2nd plot col=c(\"red\", \"black\"), fill = TRUE, fill.alpha = 0.1, lwd=2, cex=1.2) heplot(rohwer.ses2, add=TRUE, col=c(\"brown\", \"black\"), grand.mean=TRUE, error.ellipse=TRUE, # not shown by default when add=TRUE fill = TRUE, fill.alpha = 0.1, lwd=2, cex=1.2) # label the groups at their centroid means <- aggregate(cbind(SAT,PPVT)~SES, data=Rohwer, mean) text(means[,2], means[,3], labels=means[,1], pos=3, cex=2, col=\"black\")"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"mancova-model","dir":"Articles","previous_headings":"1 Rohwer data: Aptitude and achievement","what":"MANCOVA model","title":"HE plot MMRA Examples","text":"Alternatively (optimistically), can fit MANCOVA model allows different means two SES groups responses, constrains slopes PA covariates equal. Note , although multivariate tests two covariates (ns na) highly significant, univariate multiple regression tests separate responses [summary(rohwer.mod)] relatively weak. can also test global 5 df hypothesis, \\(\\mathbf{B}=\\mathbf{0}\\), covariates null effects responses linear hypothesis. First, extract names PA tests predictors model. car::linearHypothesis() takes vector names coefficients tested simultaneously. 2D views additive MANCOVA model rohwer.mod overall test covariates produced follows, giving plots Figure 1.4. Figure 1.4: plot SAT PPVT (left) SAT Raven (right) using MANCOVA model. ellipses labeled ‘Regr’ show test overall model, including predictors. positive orientation Regr ellipses shows predicted values three responses positively correlated (SAT PPVT). well, High SES group higher responses Low SES group. Alternatively, pairwise plots among responses drawn using pairs.mlm() function, 3D plot, using heplot3d() shown Figure 1.5. Figure 1.5: 3D plot MANCOVA model fit Rohwer data.","code":"# MANCOVA, assuming equal slopes rohwer.mod <- lm(cbind(SAT, PPVT, Raven) ~ SES + n + s + ns + na + ss, data=Rohwer) Anova(rohwer.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> SES 1 0.379 12.18 3 60 2.5e-06 *** #> n 1 0.040 0.84 3 60 0.4773 #> s 1 0.093 2.04 3 60 0.1173 #> ns 1 0.193 4.78 3 60 0.0047 ** #> na 1 0.231 6.02 3 60 0.0012 ** #> ss 1 0.050 1.05 3 60 0.3770 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 covariates <- c(\"n\", \"s\", \"ns\", \"na\", \"ss\") # or: covariates <- rownames(coef(rohwer.mod))[-(1:2)] Regr <- linearHypothesis(rohwer.mod, covariates) print(Regr, digits=4, SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 5 0.6658 3.537 15 186 2.31e-05 *** #> Wilks 5 0.4418 3.812 15 166 8.28e-06 *** #> Hotelling-Lawley 5 1.0309 4.032 15 176 2.79e-06 *** #> Roy 5 0.7574 9.392 5 62 1.06e-06 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 colors <- c(\"red\", \"blue\", rep(\"black\",5), \"#969696\") heplot(rohwer.mod, col=colors, variables=c(1,2), hypotheses=list(\"Regr\" = covariates), fill = TRUE, fill.alpha = 0.1, cex=1.5, lwd=c(2, rep(3,5), 4), main=\"(SAT, PPVT) in Rohwer MANCOVA model\") heplot(rohwer.mod, col=colors, variables=c(1,3), hypotheses=list(\"Regr\" = covariates), fill = TRUE, fill.alpha = 0.1, cex=1.5, lwd=c(2, rep(3,5), 4), main=\"(SAT, Raven) in Rohwer MANCOVA model\") pairs(rohwer.mod, col=colors, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\")), cex=1.3, lwd=c(2, rep(3,5), 4)) colors <- c(\"pink\", \"blue\", rep(\"black\",5), \"#969696\") heplot3d(rohwer.mod, col=colors, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\")))"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"testing-homogeneity-of-regression","dir":"Articles","previous_headings":"1 Rohwer data: Aptitude and achievement","what":"Testing homogeneity of regression","title":"HE plot MMRA Examples","text":"MANCOVA model, rohwer.mod, relatively simple interpretations (large effect SES, ns na major predictors) test relies assumption homogeneity slopes predictors. can test assumption follows, adding interactions SES covariates: appears weak evidence unequal slopes separate SES: terms. evidence heterogeneity stronger, however, terms tested collectively using linearHypothesis() function: model (rohwer.mod2) similar spirit two models (rohwer.ses1 rohwer.ses2) fit two SES groups separately show Figure 1.3, except model rohwer.mod2 assumes common within-groups error covariance matrix allows overall tests. illustrate model rohwer.mod2, construct plot SAT PPVT shown Figure 1.6. simplify display, show hypothesis ellipses overall effects PA tests baseline high-SES group, single combined ellipse SESLo: interaction terms tested previously, representing differences slopes low high-SES groups. SES “treatment-coded” model, ellipse covariate represents hypothesis slopes covariate zero high-SES baseline category. parameterization, ellipse Slopes represents joint hypothesis slopes covariates differ low-SES group. Figure 1.6: plot SAT PPVT, fitting model rohwer.mod2 allows unequal slopes covariates. Comparing Figure 1.6 heterogeneous slopes model Figure 1.4 (left) homogeneous slopes model, can seen covariates ellipses similar size orientation, reflecting similar evidence respective null hypotheses, effect SES, showing greater performance high-SES group response measures. Somewhat subtle, error ellipse noticeably smaller Figure 1.6, reflecting additional variation accounted differences slopes.","code":"rohwer.mod2 <- lm(cbind(SAT, PPVT, Raven) ~ SES * (n + s + ns + na + ss), data=Rohwer) Anova(rohwer.mod2) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> SES 1 0.391 11.78 3 55 4.5e-06 *** #> n 1 0.079 1.57 3 55 0.20638 #> s 1 0.125 2.62 3 55 0.05952 . #> ns 1 0.254 6.25 3 55 0.00100 *** #> na 1 0.307 8.11 3 55 0.00015 *** #> ss 1 0.060 1.17 3 55 0.32813 #> SES:n 1 0.072 1.43 3 55 0.24417 #> SES:s 1 0.099 2.02 3 55 0.12117 #> SES:ns 1 0.118 2.44 3 55 0.07383 . #> SES:na 1 0.148 3.18 3 55 0.03081 * #> SES:ss 1 0.057 1.12 3 55 0.35094 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (coefs <- rownames(coef(rohwer.mod2))) #> [1] \"(Intercept)\" \"SESLo\" \"n\" \"s\" \"ns\" #> [6] \"na\" \"ss\" \"SESLo:n\" \"SESLo:s\" \"SESLo:ns\" #> [11] \"SESLo:na\" \"SESLo:ss\" print(linearHypothesis(rohwer.mod2, coefs[grep(\":\", coefs)]), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 5 0.4179 1.845 15 171.0 0.03209 * #> Wilks 5 0.6236 1.894 15 152.2 0.02769 * #> Hotelling-Lawley 5 0.5387 1.927 15 161.0 0.02396 * #> Roy 5 0.3846 4.385 5 57.0 0.00191 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 colors <- c(\"red\", \"blue\", rep(\"black\",5), \"#969696\") heplot(rohwer.mod2, col=c(colors, \"brown\"), terms=c(\"SES\", \"n\", \"s\", \"ns\", \"na\", \"ss\"), hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\"), \"Slopes\" = coefs[grep(\":\", coefs)]))"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"recovery-from-hernia-repair","dir":"Articles","previous_headings":"","what":"Recovery from hernia repair","title":"HE plot MMRA Examples","text":"example uses Hernior data (Mosteller & Tukey (1977), Data Exhibit 8, p. 567-568), comprising data measures post-operative recovery 32 patients undergoing elective herniorrhaphy operation, relation pre-operative measures. outcome measures : leave, patient’s condition upon leaving recovery room (1-4 scale, 1=best), nurse, level nursing required one week operation (1-5 scale, 1=worst) los, length stay hospital operation (days) predictor variables : patient age, sex, `pstat, physical status ( 1-5 scale, 1=perfect health, …, 5=poor health), build, body build (1-5 scale, 1=emaciated, …, 5=obese), preoperative complications (cardiac) heart respiration (resp), 1-4 scales, 1=none, …, 4=severe.","code":"data(Hernior) str(Hernior) #> 'data.frame': 32 obs. of 9 variables: #> $ age : int 78 60 68 62 76 76 64 74 68 79 ... #> $ sex : Factor w/ 2 levels \"f\",\"m\": 2 2 2 2 2 2 2 1 2 1 ... #> $ pstat : int 2 2 2 3 3 1 1 2 3 2 ... #> $ build : int 3 3 3 5 4 3 2 3 4 2 ... #> $ cardiac: int 1 2 1 3 3 1 1 2 2 1 ... #> $ resp : int 1 2 1 1 2 1 2 2 1 1 ... #> $ leave : int 2 2 1 1 2 1 1 1 1 2 ... #> $ los : int 9 4 7 35 9 7 5 16 7 11 ... #> $ nurse : num 3 5 4 3 4 5 5 3 5 3 ..."},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"all-predictors-model","dir":"Articles","previous_headings":"2 Recovery from hernia repair","what":"All predictors model","title":"HE plot MMRA Examples","text":"begin model fitting predictors. Note ordinal predictors, pstat, build, cardiac resp arguably treated factors, rather linear, regression terms. give tests nonlinear effects relations responses. ignore possibility example. results multivariate tests somewhat disappointing. physical status predictor (pstat) appears significant conventional levels. univariate models response implicit MLM Hern.mod. can printed using summary(), can use summary() extract certain statistics univariate response model, . conveniently, function heplots::glance.mlm() extends broom::glance.lm() give one-line summary statistics response variable MLM. \\(R^2\\) \\(F\\) statistics overall model assessing impact predictors. Univariate tests predictors models (shown ) hard interpret, largely show significant effects leave variable. Yet, \\(R^2\\) values responses slightly promising. proceed multivariate overall test \\(\\mathbf{B} = 0\\) predictors, whose term names can easily extracted rownames coefficients. Figure 2.1: pairs plot Hernior data pairs() plot MLM gives set plots shown Figure 2.1 helps interpret relations among predictors lead highly significant overall test. Among predictors, age sex small insignificant effects outcome measures jointly. predictors contribute overall test \\(\\mathbf{B} = 0\\), though different ways various responses. example, panel (leave, los) Figure 2.1, can seen pstat individually outside \\(\\mathbf{E}\\) ellipse, build resp contribute overall test opposite direction.","code":"Hern.mod <- lm(cbind(leave, nurse, los) ~ age + sex + pstat + build + cardiac + resp, data=Hernior) Anova(Hern.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> age 1 0.143 1.27 3 23 0.307 #> sex 1 0.026 0.21 3 23 0.892 #> pstat 1 0.333 3.84 3 23 0.023 * #> build 1 0.257 2.65 3 23 0.073 . #> cardiac 1 0.228 2.26 3 23 0.108 #> resp 1 0.248 2.53 3 23 0.082 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Hern.summary <- summary(Hern.mod) unlist(lapply(Hern.summary, function(x) x$r.squared)) #> Response leave Response nurse Response los #> 0.5918 0.2474 0.3653 glance.mlm(Hern.mod) #> # A tibble: 3 × 9 #> response r.squared adj.r.squared sigma fstatistic numdf dendf p.value nobs #> #> 1 leave 0.592 0.494 0.388 6.04 6 25 0.000519 32 #> 2 nurse 0.247 0.0668 0.841 1.37 6 25 0.265 32 #> 3 los 0.365 0.213 5.62 2.40 6 25 0.0573 32 # test overall regression (predictors <- rownames(coef(Hern.mod))[-1]) #> [1] \"age\" \"sexm\" \"pstat\" \"build\" \"cardiac\" \"resp\" Regr <- linearHypothesis(Hern.mod, predictors) print(Regr, digits=5, SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 6 1.10198 2.4192 18 75.000 0.0041356 ** #> Wilks 6 0.21734 2.6046 18 65.539 0.0025239 ** #> Hotelling-Lawley 6 2.26797 2.7300 18 65.000 0.0016285 ** #> Roy 6 1.55434 6.4764 6 25.000 0.0003232 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 clr <- c(\"red\", \"darkgray\", \"blue\", \"darkgreen\", \"magenta\", \"brown\", \"black\") vlab <- c(\"LeaveCondition\\n(leave)\", \"NursingCare\\n(nurse)\", \"LengthOfStay\\n(los)\") hyp <- list(\"Regr\" = predictors) pairs(Hern.mod, hypotheses=hyp, col=clr, var.labels=vlab, fill=c(TRUE,FALSE), fill.alpha = 0.1, cex=1.25)"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"canonical-analysis","dir":"Articles","previous_headings":"2 Recovery from hernia repair","what":"Canonical analysis","title":"HE plot MMRA Examples","text":"multivariate regression example, terms model Hern.mod 1 df, plot lines plots. alternative view effects can seen canonical discriminant space, , predictor shows scores linear combination responses contributes multivariate test effect, together weights responses. use candiscList() calculate canonical analyses predictor terms Hern.mod. 1D canonical discriminant plots terms can obtained interactively menu, simply plotting Hern.canL object. Plots separate terms produced lines , shown Figure 2.2 Figure 2.3. pstat build: Figure 2.2: 1D Canonical discriminant plots physical status (pstat) build. canonical scores better outcomes associated smaller scores. Arrows show correlations responses 1D canonical scores. age cardiac: Figure 2.3: 1D Canonical discriminant plots age cardiac. canonical scores better outcomes associated smaller scores. plots, canonical scores panel shows linear combinations response variables largest possible \\(R^2\\). Better outcomes correspond numerically smaller canonical scores. arrows structure panel proportional canonical weights. plots provide simple interpretations results canonical combinations responses. Better physical status, smaller body build, lower age absence cardiac complications positively related better outcomes.","code":"Hern.canL <- candiscList(Hern.mod) plot(Hern.canL) plot(Hern.canL, term=\"pstat\") plot(Hern.canL, term=\"build\") plot(Hern.canL, term=\"age\") plot(Hern.canL, term=\"cardiac\")"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"grades-in-a-sociology-course","dir":"Articles","previous_headings":"","what":"Grades in a Sociology Course","title":"HE plot MMRA Examples","text":"data set SocGrades contains four outcome measures student performance introductory sociology course together six potential predictors. data used Marascuilo & Levin (1983) example canonical correlation analysis, also suitable examples multivariate multiple regression, MANOVA, MANCOVA step-analysis multivariate linear models. outcome measures used three test scores course, midterm1, midterm2, final, course evaluation (eval).2 Predictor variables : class, student’s social class (ordered factor levels 1 > 2 > 3) sex, gpa, grade point average, boards, College Board test scores, hssoc, previous high school unit sociology? (values , yes), pretest, score course pretest.","code":"str(SocGrades) #> 'data.frame': 40 obs. of 10 variables: #> $ class : Ord.factor w/ 3 levels \"3\"<\"2\"<\"1\": 2 2 2 1 2 1 3 2 1 2 ... #> $ sex : Factor w/ 2 levels \"F\",\"M\": 2 2 2 2 2 2 1 2 2 1 ... #> $ gpa : num 3.55 2.7 3.5 2.91 3.1 3.49 3.17 3.57 3.76 3.81 ... #> $ boards : int 410 390 510 430 600 610 610 560 700 460 ... #> $ hssoc : Factor w/ 2 levels \"no\",\"yes\": 1 1 1 1 1 1 1 1 2 2 ... #> $ pretest : int 17 20 22 13 16 28 14 10 28 30 ... #> $ midterm1: int 43 50 47 24 47 57 42 42 69 48 ... #> $ midterm2: int 61 47 79 40 60 59 61 79 83 67 ... #> $ final : int 129 60 119 100 79 99 92 107 156 110 ... #> $ eval : int 3 1 1 1 2 1 3 2 1 1 ..."},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"models","dir":"Articles","previous_headings":"3 Grades in a Sociology Course","what":"Models","title":"HE plot MMRA Examples","text":"basic MLM fit grades.mod predictor variables.","code":"data(SocGrades) grades.mod <- lm(cbind(midterm1, midterm2, final, eval) ~ class + sex + gpa + boards + hssoc + pretest, data=SocGrades) Anova(grades.mod, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> class 2 1.567 11.75 4 30 7.3e-06 *** #> sex 1 0.553 4.01 4 29 0.0104 * #> gpa 1 1.208 8.76 4 29 9.2e-05 *** #> boards 1 0.731 5.30 4 29 0.0025 ** #> hssoc 1 0.035 0.25 4 29 0.9052 #> pretest 1 0.313 2.27 4 29 0.0859 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"screening-for-interactions","dir":"Articles","previous_headings":"3 Grades in a Sociology Course > 3.1 Models","what":"Screening for interactions","title":"HE plot MMRA Examples","text":"univariate multivariate response models, often useful screen higher-order terms (interactions, non-linear predictors). can easily done using update(), . First, try extended model pairwise interactions predictors. model formula, ~.^2, . represents terms model, ^2 generates products terms, class:sex, class:gpa, forth. results , interaction class:sex significant, main effects hssoc pretest remain insignificant. revised model explore grades.mod3, pairwise plot responses (Figure 3.1 shows nearly effects expected directions: higher gpa, boards, class leads better performance outcomes. interaction class:sex seems confined largely midterm1. Figure 3.1: pairs plot SocGrade, model grades.mod3. effects easier appreciate three exam grades jointly 3D plot can rotate interactively. snapshot shown Figure 3.2. Figure 3.2: 3D plot SocGrades, model grades.mod3 Interactive rotation plot shows effect class two dimensional, , one dimension small. major axis class ellipsoid aligned increasing performance three grades, expected ordering three social classes.","code":"grades.mod2 <- update(grades.mod, . ~ .^2) Anova(grades.mod2, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> class 2 2.817 7.04 4 10 0.0058 ** #> sex 1 0.487 1.09 4 9 0.4152 #> gpa 1 1.998 4.49 4 9 0.0286 * #> boards 1 2.338 5.26 4 9 0.0183 * #> hssoc 1 0.281 0.63 4 9 0.6522 #> pretest 1 0.510 1.15 4 9 0.3946 #> class:sex 2 2.039 5.10 4 10 0.0168 * #> class:gpa 2 0.982 2.45 4 10 0.1137 #> class:boards 2 0.522 1.31 4 10 0.3321 #> class:hssoc 2 0.356 0.89 4 10 0.5041 #> class:pretest 2 1.005 2.51 4 10 0.1082 #> sex:gpa 1 0.269 0.60 4 9 0.6694 #> sex:boards 1 0.184 0.41 4 9 0.7944 #> sex:hssoc 1 0.909 2.04 4 9 0.1714 #> sex:pretest 1 0.885 1.99 4 9 0.1795 #> gpa:boards 1 0.447 1.00 4 9 0.4537 #> gpa:hssoc 1 0.596 1.34 4 9 0.3269 #> gpa:pretest 1 0.472 1.06 4 9 0.4291 #> boards:hssoc 1 0.353 0.80 4 9 0.5573 #> boards:pretest 1 0.705 1.59 4 9 0.2593 #> hssoc:pretest 1 1.464 3.29 4 9 0.0635 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 grades.mod3 <- update(grades.mod, . ~ . + class:sex - hssoc - pretest) Anova(grades.mod3, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> class 2 1.588 11.91 4 30 6.5e-06 *** #> sex 1 0.575 4.17 4 29 0.00864 ** #> gpa 1 1.434 10.40 4 29 2.4e-05 *** #> boards 1 0.895 6.49 4 29 0.00074 *** #> class:sex 2 0.450 3.38 4 30 0.02143 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 pairs(grades.mod3) heplot3d(grades.mod3, wire=FALSE)"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"canonical-analysis-1","dir":"Articles","previous_headings":"3 Grades in a Sociology Course","what":"Canonical analysis","title":"HE plot MMRA Examples","text":"representation effects canonical space particularly useful . , use candiscList() compute canonical decompositions terms model, extract canonical \\(R^2\\) terms result. use heplot() \"candiscList\" object show effects class canonical space, giving Figure 3.3. Figure 3.3: Canonical plot class effect grades.mod3 can seen Figure 3.3 nearly variation exam performance due class aligned first canonical dimension. three tests course evaluation similar weights dimension, course evaluation differs rest along second, small dimension. 1D plots canonical scores effects model also interest, provide simple interpretations effects response variables. statements produce plots shown Figure 3.4. Figure 3.4: 1D Canonical discriminant plots sex gpa. Higher canonical scores reflect better course performance. readily seen males perform better overall, effect sex strongest midterm2. well, increasing course performance tests strongly associated gpa.","code":"# calculate canonical results for all terms grades.can <- candiscList(grades.mod3) # extract canonical R^2s unlist(lapply(grades.can, function(x) x$canrsq)) #> class1 class2 sex gpa boards class:sex1 class:sex2 #> 0.61362 0.02419 0.36527 0.58915 0.47227 0.31046 0.13293 # plot class effect in canonical space heplot(grades.can, term=\"class\", scale=4, fill=TRUE, var.col=\"black\", var.lwd=2) plot(grades.can, term=\"sex\") plot(grades.can, term=\"gpa\")"},{"path":[]},{"path":"https://friendly.github.io/heplots/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Michael Friendly. Author, maintainer. John Fox. Author. Georges Monette. Author. Phil Chalmers. Contributor. Duncan Murdoch. Contributor.","code":""},{"path":"https://friendly.github.io/heplots/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Michael Friendly John Fox Georges Monette (2024). heplots: Visualizing Tests Multivariate Linear Models. R package version 1.6.3. URL https://CRAN.R-project.org/package=heplots Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 2007, 16, 421-444 Michael Friendly (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. DOI: 10.18637/jss.v037.i04","code":"@Manual{, title = {{heplots}: Visualizing Tests in Multivariate Linear Models}, author = {Michael Friendly and John Fox and Georges Monette}, year = {2024}, note = {R package version 1.6.3}, url = {https://CRAN.R-project.org/package=heplots}, } @Article{, title = {HE plots for Multivariate General Linear Models}, author = {Michael Friendly}, year = {2007}, journal = {Journal of Computational and Graphical Statistics}, volume = {16}, number = {4}, pages = {421--444}, } @Article{, title = {HE Plots for Repeated Measures Designs}, author = {Michael Friendly}, journal = {Journal of Statistical Software}, year = {2010}, volume = {37}, number = {4}, pages = {1--40}, doi = {10.18637/jss.v037.i04}, }"},{"path":[]},{"path":"https://friendly.github.io/heplots/index.html","id":"visualizing-hypothesis-tests-in-multivariate-linear-models","dir":"","previous_headings":"","what":"Visualizing Hypothesis Tests in Multivariate Linear Models","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"Version 1.6.3","code":""},{"path":"https://friendly.github.io/heplots/index.html","id":"description","dir":"","previous_headings":"","what":"Description","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"heplots package provides functions visualizing hypothesis tests multivariate linear models (MANOVA, multivariate multiple regression, MANCOVA, repeated measures designs). plots represent sums--squares--products matrices linear hypotheses (H) error (E) using ellipses (two dimensions), ellipsoids (three dimensions), line segments one dimension. theory applications, see: Friendly (2007) basic theory based. Fox, Friendly Monette (2009) brief introduction, Friendly (2010) application ideas repeated measure designs, Friendly, Monette Fox (2013) general discussion role elliptical geometry statistical understanding, Friendly & Sigal (2017) applied R tutorial, Friendly & Sigal (2018) theory examples visualizing equality covariance matrices. use work teaching research, please cite given citation(\"heplots\") see Citation. topics now addressed include: robust MLMs, using iteratively re-weighted least squared -weight observations large multivariate residuals, robmlm(). Mahalanobis() calculates classical robust Mahalanobis squared distances using MCD MVE estimators center covariance. visualizing tests equality covariance matrices MLMs (Box’s M test), boxM() plot.boxM(). χ2 Q-Q plots MLMs (cqplot()) detect outliers assess multivariate normality residuals. bivariate coefficient plots showing elliptical confidence regions (coefplot()). respect, heplots package now aims provide wide range tools analyzing visualizing multivariate response linear models, together packages: related candisc package provides plots canonical discriminant space, space linear combinations responses show maximum possible effects canonical correlation multivariate regression designs. Another package, mvinfluence, provides diagnostic measures plots influential observations MLM designs. Several tutorial vignettes also included. See vignette(package=\"heplots\").","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/index.html","id":"he-plot-functions","dir":"","previous_headings":"","what":"HE plot functions","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"graphical functions contained display multivariate model effects variable (data) space, one response variables (contrasts among response variables repeated measures designs). heplot() constructs two-dimensional plots model terms linear hypotheses pairs response variables multivariate linear models. heplot3d() constructs analogous 3D plots triples response variables. pairs method, pairs.mlm() constructs scatterplot matrix pairwise plots. heplot1d() constructs 1-dimensional analogs plots model terms linear hypotheses single response variables.","code":""},{"path":"https://friendly.github.io/heplots/index.html","id":"other-functions","dir":"","previous_headings":"","what":"Other functions","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"glance.mlm() extends broom::glance.lm() multivariate response models, giving one-line statistical summary response variable. boxM() Calculates Box’s M test homogeneity covariance matrices MANOVA design. plot method displays visual representation components test. Associated , bartletTests() levineTests() give univariate tests homogeneity variance response measure MLM. covEllipses() draw covariance (data) ellipses one group, optionally including ellipse pooled within-group covariance.","code":""},{"path":"https://friendly.github.io/heplots/index.html","id":"repeated-measure-designs","dir":"","previous_headings":"Other functions","what":"Repeated measure designs","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"repeated measure designs, -subject effects within-subject effects must plotted separately, error terms (E matrices) differ. terms involving within-subject effects, functions carry linear transformation matrix Y responses matrix Y M, M model matrix term intra-subject design produce plots H E matrices transformed space. vignette \"repeated\" describes graphical methods repeated measures designs. (present, vignette available plots repeated measures designs.)","code":""},{"path":"https://friendly.github.io/heplots/index.html","id":"datasets","dir":"","previous_headings":"","what":"Datasets","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"package also provides large collection data sets illustrating variety multivariate linear models types listed , together graphical displays. table classifies method tags. names linked documentation pkgdown website, [http://friendly.github.io/heplots].","code":""},{"path":"https://friendly.github.io/heplots/index.html","id":"examples","dir":"","previous_headings":"","what":"Examples","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"example illustrates plots using classic iris data set. means flower variables differ Species? dataset imputus R. . Fisher (1936) propose method discriminant analysis using data collected Edgar Anderson (1928). Though may rightly deprecate Fisher supporter eugenics, Anderson’s iris dataset blamed. basic plot shows H E ellipses first two response variables (: Sepal.Length Sepal.Width). multivariate test significant (Roy’s test) iff H ellipse projects anywhere outside E ellipse. positions group means show differ two response variables shown, provide interpretation orientation H ellipse: long directions differences among means.","code":"iris.mod <- lm(cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) ~ Species, data=iris) heplot(iris.mod)"},{"path":"https://friendly.github.io/heplots/index.html","id":"contrasts","dir":"","previous_headings":"Examples","what":"Contrasts","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"Contrasts linear hypotheses can shown well, ellipses look better filled. create contrasts test differences versacolor virginca also setosa average two. 1 df contrast plots degenerate 1D ellipse– line. contrasts orthogonal, add total 2 df effect Species. Note first contrast, labeled V:V, distinguishes means versicolor virginica; second contrast, S:VV distinguishes setosa two.","code":"par(mar=c(4,4,1,1)+.1) contrasts(iris$Species)<-matrix(c(0, -1, 1, 2, -1, -1), nrow=3, ncol=2) contrasts(iris$Species) #> [,1] [,2] #> setosa 0 2 #> versicolor -1 -1 #> virginica 1 -1 iris.mod <- lm(cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) ~ Species, data=iris) hyp <- list(\"V:V\"=\"Species1\",\"S:VV\"=\"Species2\") heplot(iris.mod, hypotheses=hyp, fill=TRUE, fill.alpha=0.1)"},{"path":"https://friendly.github.io/heplots/index.html","id":"all-pairwise-he-plots","dir":"","previous_headings":"Examples","what":"All pairwise HE plots","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"pairwise plots produced using pairs() method MLM objects.","code":"pairs(iris.mod, hypotheses=hyp, hyp.labels=FALSE, fill=TRUE, fill.alpha=0.1)"},{"path":"https://friendly.github.io/heplots/index.html","id":"covariance-ellipses","dir":"","previous_headings":"Examples","what":"Covariance ellipses","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"MANOVA relies assumption within-group covariance matrices equal. useful visualize space predictors. covEllipses() provides classical robust estimates. figure shows three Iris species pooled covariance matrix, E matrix used MANOVA tests.","code":"covEllipses(iris[,1:4], iris$Species) covEllipses(iris[,1:4], iris$Species, fill=TRUE, method=\"mve\", add=TRUE, labels=\"\")"},{"path":"https://friendly.github.io/heplots/index.html","id":"references","dir":"","previous_headings":"","what":"References","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"Anderson, E. (1928). Problem Species Northern Blue Flags, Iris versicolor L. Iris virginica L. Annals Missouri Botanical Garden, 13, 241–313. Fisher, R. . (1936). Use Multiple Measurements Taxonomic Problems. Annals Eugenics, 8, 379–388. Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples. Journal Statistical Software, 17, 1-42. Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421-444. DOI. Fox, J., Friendly, M. & Monette, G. (2009). Visualizing hypothesis tests multivariate linear models: heplots package R Computational Statistics, 24, 233-246. Friendly, M. (2010). plots repeated measures designs. Journal Statistical Software, 37, 1–37. Friendly, M.; Monette, G. & Fox, J. (2013). Elliptical Insights: Understanding Statistical Methods Elliptical Geometry Statistical Science, 28, 1-39. Friendly, M. & Sigal, M. (2017). Graphical Methods Multivariate Linear Models Psychological Research: R Tutorial. Quantitative Methods Psychology, 13, 20-45. Friendly, M. & Sigal, M. (2018): Visualizing Tests Equality Covariance Matrices, American Statistician, DOI","code":""},{"path":"https://friendly.github.io/heplots/reference/AddHealth.html","id":null,"dir":"Reference","previous_headings":"","what":"Adolescent Health Data — AddHealth","title":"Adolescent Health Data — AddHealth","text":"data taken National Longitudinal Study Adolescent Health. cross-sectional sample participants grades 7--12, described analyzed Warne (2014).","code":""},{"path":"https://friendly.github.io/heplots/reference/AddHealth.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Adolescent Health Data — AddHealth","text":"data frame 4344 observations following 3 variables. grade ordered factor levels 7 < 8 < 9 < 10 < 11 < 12 depression numeric vector anxiety numeric vector","code":""},{"path":"https://friendly.github.io/heplots/reference/AddHealth.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Adolescent Health Data — AddHealth","text":"Warne, R. T. (2014). primer Multivariate Analysis Variance (MANOVA) Behavioral Scientists. Practical Assessment, Research & Evaluation, 19 (1). https://scholarworks.umass.edu/pare/vol19/iss1/17/","code":""},{"path":"https://friendly.github.io/heplots/reference/AddHealth.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Adolescent Health Data — AddHealth","text":"depression response question \"last month, often feel depressed blue?\" anxiety response question \"last month, often trouble relaxing?\" responses depression anxiety recorded 5-point Likert scale, categories 0=\"Never\", 1=\"Rarely\", 2=\"Occasionally\", 3=\"Often\", 4=\"Every day\"","code":""},{"path":"https://friendly.github.io/heplots/reference/AddHealth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Adolescent Health Data — AddHealth","text":"","code":"data(AddHealth) # fit mlm AH.mod <- lm(cbind(depression, anxiety) ~ grade, data=AddHealth) car::Anova(AH.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> grade 5 0.022415 9.834 10 8676 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 summary(car::Anova(AH.mod)) #> #> Type II MANOVA Tests: #> #> Sum of squares and products for error: #> depression anxiety #> depression 6058.911 3021.691 #> anxiety 3021.691 5210.233 #> #> ------------------------------------------ #> #> Term: grade #> #> Sum of squares and products for the hypothesis: #> depression anxiety #> depression 112.76722 87.57399 #> anxiety 87.57399 75.02650 #> #> Multivariate Tests: grade #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 5 0.0224153 9.833964 10 8676 < 2.22e-16 *** #> Wilks 5 0.9776192 9.872584 10 8674 < 2.22e-16 *** #> Hotelling-Lawley 5 0.0228579 9.911186 10 8672 < 2.22e-16 *** #> Roy 5 0.0211939 18.387786 5 4338 < 2.22e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(AH.mod, hypotheses=\"grade.L\", fill=c(TRUE, FALSE))"},{"path":"https://friendly.github.io/heplots/reference/Adopted.html","id":null,"dir":"Reference","previous_headings":"","what":"Adopted Children — Adopted","title":"Adopted Children — Adopted","text":"Data subset observational, longitudinal, study adopted children. child's intelligence related intelligence biological mother intelligence adoptive mother?","code":""},{"path":"https://friendly.github.io/heplots/reference/Adopted.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Adopted Children — Adopted","text":"data frame 62 observations following 6 variables. AMED adoptive mother's years education (proxy IQ) BMIQ biological mother's score IQ test Age2IQ IQ child age 2 Age4IQ IQ child age 4 Age8IQ IQ child age 8 Age13IQ IQ child age 13","code":""},{"path":"https://friendly.github.io/heplots/reference/Adopted.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Adopted Children — Adopted","text":"Ramsey, F.L. Schafer, D.W. (2002). Statistical Sleuth: Course Methods Data Analysis (2nd ed), Duxbury. data set identical ex1605 Sleuth2 package.","code":""},{"path":"https://friendly.github.io/heplots/reference/Adopted.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Adopted Children — Adopted","text":"child's intelligence measured age 2, 4, 8, 13 sample. intelligence change time, changes related intelligence birth adoptive mother?","code":""},{"path":"https://friendly.github.io/heplots/reference/Adopted.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Adopted Children — Adopted","text":"Friendly, M. (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 . Skodak, M. Skeels, H.M. (1949). Final Follow-Study One Hundred Adopted Children, Journal Genetic Psychology 75: 85--125.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/Adopted.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Adopted Children — Adopted","text":"","code":"# Treat as multivariate regression problem Adopted.mod <- lm(cbind(Age2IQ, Age4IQ, Age8IQ, Age13IQ) ~ AMED + BMIQ, data=Adopted) Adopted.mod #> #> Call: #> lm(formula = cbind(Age2IQ, Age4IQ, Age8IQ, Age13IQ) ~ AMED + #> BMIQ, data = Adopted) #> #> Coefficients: #> Age2IQ Age4IQ Age8IQ Age13IQ #> (Intercept) 117.63046 93.33771 88.03739 76.84827 #> AMED -0.44136 -0.02073 -0.01216 -0.16063 #> BMIQ 0.04001 0.22172 0.30961 0.36747 #> require(car) #> Loading required package: car #> Loading required package: carData # test overall multivariate regression print(linearHypothesis(Adopted.mod, c(\"AMED\",\"BMIQ\")), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 0.1964576 1.552235 8 114 0.147134 #> Wilks 2 0.8065020 1.589253 8 112 0.135846 #> Hotelling-Lawley 2 0.2362528 1.624238 8 110 0.125939 #> Roy 2 0.2195371 3.128404 4 57 0.021426 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # show separate linear regressions op <- par(mfcol=c(2,4), mar=c(4,4,1,1)+.1) for (i in 3:6) { dataEllipse(as.matrix(Adopted[,c(1,i)]), col=\"black\", levels=0.68, ylim=c(70,140)) abline(lm(Adopted[,i] ~ Adopted[,1]), col=\"red\", lwd=2) dataEllipse(as.matrix(Adopted[,c(2,i)]), col=\"black\", levels=0.68, ylim=c(70,140)) abline(lm(Adopted[,i] ~ Adopted[,2]), col=\"red\", lwd=2) abline(a=0,b=1, lty=1, col=\"blue\") } par(op) # between-S (MMReg) plots heplot(Adopted.mod, hypotheses=list(\"Reg\"=c(\"AMED\", \"BMIQ\")), main=\"IQ scores of adopted children: MMReg\") pairs(Adopted.mod, hypotheses=list(\"Reg\"=c(\"AMED\", \"BMIQ\"))) if(requireNamespace(\"rgl\")){ heplot3d(Adopted.mod, hypotheses=list(\"Reg\"=c(\"AMED\", \"BMIQ\")), col = c(\"red\", \"blue\", \"black\", \"gray\"), wire=FALSE) } # Treat IQ at different ages as a repeated measure factor # within-S models & plots Age <- data.frame(Age=ordered(c(2,4,8,13))) car::Anova(Adopted.mod, idata=Age, idesign=~Age, test=\"Roy\") #> #> Type II Repeated Measures MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 115.669 6824.5 1 59 < 2.2e-16 *** #> AMED 1 0.002 0.1 1 59 0.737878 #> BMIQ 1 0.126 7.5 1 59 0.008302 ** #> Age 1 0.712 13.5 3 57 8.911e-07 *** #> AMED:Age 1 0.014 0.3 3 57 0.845454 #> BMIQ:Age 1 0.122 2.3 3 57 0.085792 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # within-S plots heplot(Adopted.mod, idata=Age, idesign=~Age, iterm=\"Age\", cex=1.25, cex.lab=1.4, fill=c(FALSE, TRUE), hypotheses=list(\"Reg\"=c(\"AMED\", \"BMIQ\")) )"},{"path":"https://friendly.github.io/heplots/reference/arrow3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a 3D Arrow in an RGL Scene — arrow3d","title":"Draw a 3D Arrow in an RGL Scene — arrow3d","text":"Draws 3D arrow rgl scene barbs arrow head","code":""},{"path":"https://friendly.github.io/heplots/reference/arrow3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a 3D Arrow in an RGL Scene — arrow3d","text":"","code":"arrow3d( p0 = c(0, 0, 0), p1 = c(1, 1, 1), barblen, s = 0.05, theta = pi/6, n = 3, ... )"},{"path":"https://friendly.github.io/heplots/reference/arrow3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a 3D Arrow in an RGL Scene — arrow3d","text":"p0 Initial point (tail arrow) p1 Ending point (head arrow) barblen Length barb, data units s length barb fraction line length (unless barblen specified) theta opening angle barbs n number barbs ... args passed lines3d line styling, e.g., color, lwd, etc. See material3d.","code":""},{"path":"https://friendly.github.io/heplots/reference/arrow3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw a 3D Arrow in an RGL Scene — arrow3d","text":"Returns (invisibly): integer ID line added scene","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/arrow3d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw a 3D Arrow in an RGL Scene — arrow3d","text":"Barry Rowlingson, posted R-help, 1/10/2010","code":""},{"path":"https://friendly.github.io/heplots/reference/arrow3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw a 3D Arrow in an RGL Scene — arrow3d","text":"","code":"arrow3d(c(0,0,0), c(2,2,2), barblen=.2, lwd=3, col=\"black\") arrow3d(c(0,0,0), c(-2,2,2), barblen=.2, lwd=3, col=\"red\")"},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":null,"dir":"Reference","previous_headings":"","what":"Bartlett Tests of Homogeneity of Variances — bartlettTests","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"function extends bartlett.test multivariate response setting. performs Bartlett test homogeneity variances set response variables, prints compact summary.","code":""},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"","code":"bartlettTests(y, group, ...)"},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"y data frame matrix numeric response variables multivariate linear model. group vector factor object giving group corresponding elements rows y ... arguments, passed bartlett.test","code":""},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"object classes \"anova\" \"data.frame\", one observation response variable y.","code":""},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"Bartlett's test univariate version Box's M test equality covariance matrices. function provides univariate follow-test Box's M test give one simple assessment response variables contribute significant differences variances among groups.","code":""},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"Bartlett, M. S. (1937). Properties sufficiency statistical tests. Proceedings Royal Society London Series , 160, 268-282.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"","code":"bartlettTests(iris[,1:4], iris$Species) #> Bartlett's Tests for Homogeneity of Variance #> #> Chisq df Pr(>Chisq) #> Sepal.Length 16.0057 2 0.0003345 *** #> Sepal.Width 2.0911 2 0.3515028 #> Petal.Length 55.4225 2 9.229e-13 *** #> Petal.Width 39.2131 2 3.055e-09 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 data(Skulls, package=\"heplots\") bartlettTests(Skulls[,-1], Skulls$epoch) #> Bartlett's Tests for Homogeneity of Variance #> #> Chisq df Pr(>Chisq) #> mb 7.3382 4 0.1191 #> bh 0.7315 4 0.9474 #> bl 3.5155 4 0.4755 #> nh 4.3763 4 0.3575"},{"path":"https://friendly.github.io/heplots/reference/bbox3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Find the bounding box of a rgl::mesh3d or rgl::qmesh3d object — bbox3d","title":"Find the bounding box of a rgl::mesh3d or rgl::qmesh3d object — bbox3d","text":"Ellipsoids created rgl functions meshes points, segments, ... coordinates various forms. function calculates bounding box, defined range x, y, z coordinates.","code":""},{"path":"https://friendly.github.io/heplots/reference/bbox3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Find the bounding box of a rgl::mesh3d or rgl::qmesh3d object — bbox3d","text":"","code":"bbox3d(x, ...)"},{"path":"https://friendly.github.io/heplots/reference/bbox3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Find the bounding box of a rgl::mesh3d or rgl::qmesh3d object — bbox3d","text":"x mesh3d object ... ignored","code":""},{"path":"https://friendly.github.io/heplots/reference/bbox3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Find the bounding box of a rgl::mesh3d or rgl::qmesh3d object — bbox3d","text":"2 x 3 matrix, giving minimum maximum values rows x, y, z coordinates columns.","code":""},{"path":"https://friendly.github.io/heplots/reference/Bees.html","id":null,"dir":"Reference","previous_headings":"","what":"Captive and maltreated bees — Bees","title":"Captive and maltreated bees — Bees","text":"Pabalan, Davey Packe (2000) studied effects captivity maltreatment reproductive capabilities queen worker bees complex factorial design.","code":""},{"path":"https://friendly.github.io/heplots/reference/Bees.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Captive and maltreated bees — Bees","text":"data frame 246 observations following 6 variables. caste factor levels Queen Worker treat factor levels \"\" CAP MAL time ordered factor: time treatment Iz index ovarian development Iy index ovarian reabsorption trtime factor levels 0 CAP05 CAP07 CAP10 CAP12 CAP15 MAL05 MAL07 MAL10 MAL12 MAL15","code":""},{"path":"https://friendly.github.io/heplots/reference/Bees.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Captive and maltreated bees — Bees","text":"Pabalan, N., Davey, K. G. & Packe, L. (2000). Escalation Aggressive Interactions Staged Encounters Halictus ligatus Say (Hymenoptera: Halictidae), Comparison Circle Tube Behaviors Halictine Species Journal Insect Behavior, 13, 627-650.","code":""},{"path":"https://friendly.github.io/heplots/reference/Bees.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Captive and maltreated bees — Bees","text":"Bees placed small tube either held captive (CAP) shaken periodically (MAL) one 5, 7.5, 10, 12.5 15 minutes, sacrificed two measures: ovarian development (Iz) ovarian reabsorption (Iy), taken. single control group measured treatment, .e., time 0; n=10 per group. design thus nearly three-way factorial, factors caste (Queen, Worker), treat (CAP, MAL) time, except 11 combinations Treatment Time; call trtime . Models three-way factorial design, using formula cbind(Iz,Iy) ~ caste*treat*time ignore control condition time==0, treat==NA. handle additional control group time==0, separating effects Treatment Time, 10 contrasts can defined trtime factor model cbind(Iz,Iy) ~ caste*trtime See demo(bees.contrasts) details. heplot examples , default size=\"evidence\" displays crowded interpret, effects highly significant. alternative effect-size scaling, size=\"effect\", makes relations clearer.","code":""},{"path":"https://friendly.github.io/heplots/reference/Bees.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Captive and maltreated bees — Bees","text":"Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples Journal Statistical Software, 17, 1-42.","code":""},{"path":"https://friendly.github.io/heplots/reference/Bees.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Captive and maltreated bees — Bees","text":"","code":"data(Bees) require(car) # 3-way factorial, ignoring 0 group bees.mod <- lm(cbind(Iz,Iy) ~ caste*treat*time, data=Bees) car::Anova(bees.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> caste 1 0.72792 240.787 2 180 < 2.2e-16 *** #> treat 1 0.19313 21.542 2 180 4.098e-09 *** #> time 4 0.75684 27.548 8 362 < 2.2e-16 *** #> caste:treat 1 0.02506 2.313 2 180 0.1019 #> caste:time 4 0.28670 7.572 8 362 2.288e-09 *** #> treat:time 4 0.01941 0.443 8 362 0.8945 #> caste:treat:time 4 0.06796 1.592 8 362 0.1257 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 op<-palette(c(palette()[1:4],\"brown\",\"magenta\", \"olivedrab\",\"darkgray\")) heplot(bees.mod, xlab=\"Iz: Ovarian development\", ylab=\"Iz: Ovarian reabsorption\", main=\"Bees: ~caste*treat*time\") heplot(bees.mod, size=\"effect\", xlab=\"Iz: Ovarian development\", ylab=\"Iz: Ovarian reabsorption\", main=\"Bees: ~caste*treat*time\", ) # two-way design, using trtime bees.mod1 <- lm(cbind(Iz,Iy) ~ caste*trtime, data=Bees) Anova(bees.mod1) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> caste 1 0.67976 236.673 2 223 < 2.2e-16 *** #> trtime 10 0.82851 15.842 20 448 < 2.2e-16 *** #> caste:trtime 10 0.32173 4.294 20 448 3.746e-09 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # HE plots for this model, with both significance and effect size scaling heplot(bees.mod1, xlab=\"Iz: Ovarian development\", ylab=\"Iz: Ovarian reabsorption\", main=\"Bees: ~caste*trtime\") heplot(bees.mod1, xlab=\"Iz: Ovarian development\", ylab=\"Iz: Ovarian reabsorption\", main=\"Bees: ~caste*trtime\", size=\"effect\") palette(op) # effect plots for separate responses if(require(effects)) { bees.lm1 <-lm(Iy ~ treat*caste*time, data=Bees) bees.lm2 <-lm(Iz ~ treat*caste*time, data=Bees) bees.eff1 <- allEffects(bees.lm1) plot(bees.eff1,multiline=TRUE,ask=FALSE) bees.eff2 <- allEffects(bees.lm2) plot(bees.eff2,multiline=TRUE,ask=FALSE) } #> Loading required package: effects #> lattice theme set by effectsTheme() #> See ?effectsTheme for details."},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":null,"dir":"Reference","previous_headings":"","what":"Box's M-test — boxM","title":"Box's M-test — boxM","text":"boxM performs Box's (1949) M-test homogeneity covariance matrices obtained multivariate normal data according one classification factors. test compares product log determinants separate covariance matrices log determinant pooled covariance matrix, analogous likelihood ratio test. test statistic uses chi-square approximation.","code":""},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Box's M-test — boxM","text":"","code":"boxM(Y, ...) # S3 method for default boxM(Y, group, ...) # S3 method for formula boxM(Y, data, ...) # S3 method for lm boxM(Y, ...) # S3 method for boxM summary(object, digits = getOption(\"digits\"), cov = FALSE, quiet = FALSE, ...)"},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Box's M-test — boxM","text":"Y response variable matrix default method, \"mlm\" \"formula\" object multivariate linear model. Y linear-model object formula, variables right-hand-side model must factors must completely crossed, e.g., :B ... Arguments passed methods. group factor defining groups, vector length n . data numeric data.frame matrix containing n observations p variables; expected n > p. object \"boxM\" object summary method digits number digits print summary method cov logical; TRUE covariance matrices printed. quiet logical; TRUE printing summary suppressed","code":""},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Box's M-test — boxM","text":"list class c(\"htest\", \"boxM\") containing following components: statistic approximated value chi-square distribution. parameter degrees freedom related test statistic case follows Chi-square distribution. p.value p-value test. cov list containing within covariance matrix level grouping. pooled pooled covariance matrix. logDet vector containing natural logarithm matrix cov, followed value pooled covariance matrix means matrix means groups, followed grand means df vector degrees freedom groups, followed pooled covariance matrix data.name character string giving names data. method character string \"Box's M-test Homogeneity Covariance Matrices\".","code":""},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Box's M-test — boxM","text":"object class \"htest\", statistical test printed normally default. object class \"boxM\", methods available. general provision yet handling missing data. Missing data simply removed, warning. well, computation assumes covariance matrix group non-singular, \\(log det(S_i)\\) can calculated group. minimum, requires \\(n > p\\) group. Box's M test multivariate linear model highly sensitive departures multivariate normality, just analogous univariate test. also affected adversely unbalanced designs. people recommend ignore result unless highly significant, e.g., p < .0001 worse. summary method prints variety additional statistics based eigenvalues covariance matrices. returned invisibly, list containing following components: logDet - log determinants eigs - eigenvalues covariance matrices eigstats - statistics computed eigenvalues covariance matrix:product: product eigenvalues, \\(\\prod{\\lambda_i}\\);sum: sum eigenvalues, \\(\\sum{\\lambda_i}\\);precision: average precision eigenvalues, \\(1/\\sum(1/\\lambda_i)\\);max: maximum eigenvalue, \\(\\lambda_1\\)","code":""},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Box's M-test — boxM","text":"Box, G. E. P. (1949). general distribution theory class likelihood criteria. Biometrika, 36, 317-346. Morrison, D.F. (1976) Multivariate Statistical Methods.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Box's M-test — boxM","text":"default method taken biotools package, Anderson Rodrigo da Silva anderson.agro@hotmail.com Generalized Michael Friendly John Fox","code":""},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Box's M-test — boxM","text":"","code":"data(iris) # default method res <- boxM(iris[, 1:4], iris[, \"Species\"]) res #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: iris[, 1:4] #> Chi-Sq (approx.) = 140.94, df = 20, p-value < 2.2e-16 #> summary(res) #> Summary for Box's M-test of Equality of Covariance Matrices #> #> Chi-Sq:\t 140.943 #> df:\t 20 #> p-value: < 2.2e-16 #> #> log of Covariance determinants: #> setosa versicolor virginica pooled #> -13.067360 -10.874325 -8.927058 -9.958539 #> #> Eigenvalues: #> setosa versicolor virginica pooled #> 1 0.236455690 0.487873944 0.69525484 0.44356592 #> 2 0.036918732 0.072384096 0.10655123 0.08618331 #> 3 0.026796399 0.054776085 0.05229543 0.05535235 #> 4 0.009033261 0.009790365 0.03426585 0.02236372 #> #> Statistics based on eigenvalues: #> setosa versicolor virginica pooled #> product 2.113088e-06 1.893828e-05 0.0001327479 4.732183e-05 #> sum 3.092041e-01 6.248245e-01 0.8883673469 6.074653e-01 #> precision 5.576122e-03 7.338788e-03 0.0169121236 1.304819e-02 #> max 2.364557e-01 4.878739e-01 0.6952548382 4.435659e-01 # visualize (what is done in the plot method) dets <- res$logDet ng <- length(res$logDet)-1 dotchart(dets, xlab = \"log determinant\") points(dets , 1:4, cex=c(rep(1.5, ng), 2.5), pch=c(rep(16, ng), 15), col= c(rep(\"blue\", ng), \"red\")) # formula method boxM( cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) ~ Species, data=iris) #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: Y #> Chi-Sq (approx.) = 140.94, df = 20, p-value < 2.2e-16 #> ### Skulls dat data(Skulls) # lm method skulls.mod <- lm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) boxM(skulls.mod) #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: Y #> Chi-Sq (approx.) = 45.667, df = 40, p-value = 0.2483 #>"},{"path":"https://friendly.github.io/heplots/reference/coefplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Coefficient plots for Multivariate Linear Models — coefplot","title":"Coefficient plots for Multivariate Linear Models — coefplot","text":"Displays confidence ellipses parameters multivariate linear model, given pair variables. , generalization confidenceEllipse.","code":""},{"path":"https://friendly.github.io/heplots/reference/coefplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Coefficient plots for Multivariate Linear Models — coefplot","text":"","code":"coefplot(object, ...) # S3 method for mlm coefplot( object, variables = 1:2, parm = NULL, df = NULL, level = 0.95, intercept = FALSE, Scheffe = FALSE, bars = TRUE, fill = FALSE, fill.alpha = 0.2, labels = !add, label.pos = NULL, xlab, ylab, xlim = NULL, ylim = NULL, axes = TRUE, main = \"\", add = FALSE, lwd = 1, lty = 1, pch = 19, col = palette(), cex = 2, cex.label = 1.5, lty.zero = 3, col.zero = 1, pch.zero = \"+\", verbose = FALSE, ... )"},{"path":"https://friendly.github.io/heplots/reference/coefplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Coefficient plots for Multivariate Linear Models — coefplot","text":"object multivariate linear model, fit lm(cbind(y1, y2, ...) ~ ...) ... parameters passed methods variables Response variables plot, given indices names parm Parameters plot, given indices names df Degrees freedom hypothesis tests level Confidence level confidence ellipses intercept logical. Include intercept? Scheffe TRUE, confidence intervals parameters Scheffe coverage, otherwise, individual coverage. bars Draw univariate confidence intervals variables? fill logical value vector. TRUE means confidence ellipses filled. fill.alpha Opacity confidence ellipses labels Labels confidence ellipses label.pos Positions labels ellipse. See label.ellipse xlab, ylab x, y axis labels xlim, ylim Axis limits axes Draw axes? main Plot title add logical. Add existing plot? lwd Line widths lty Line types pch Point symbols parameter estimates col Colors confidence ellipses, points, lines cex Character size points showing parameter estimates cex.label Character size ellipse labels lty.zero, col.zero, pch.zero Line type, color point symbol horizontal vertical lines 0, 0. verbose logical. Print parameter estimates variance-covariance parameter?","code":""},{"path":"https://friendly.github.io/heplots/reference/coefplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Coefficient plots for Multivariate Linear Models — coefplot","text":"Returns invisibly list coordinates ellipses drawn","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/coefplot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Coefficient plots for Multivariate Linear Models — coefplot","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/coefplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Coefficient plots for Multivariate Linear Models — coefplot","text":"","code":"rohwer.mlm <- lm(cbind(SAT,PPVT,Raven)~n+s+ns, data=Rohwer) coefplot(rohwer.mlm, lwd=2, main=\"Bivariate coefficient plot for SAT and PPVT\", fill=TRUE) coefplot(rohwer.mlm, add=TRUE, Scheffe=TRUE, fill=TRUE) coefplot(rohwer.mlm, var=c(1,3)) mod1 <- lm(cbind(SAT,PPVT,Raven)~n+s+ns+na+ss, data=Rohwer) coefplot(mod1, lwd=2, fill=TRUE, parm=(1:5), main=\"Bivariate 68% coefficient plot for SAT and PPVT\", level=0.68)"},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate column deviations from central values — colDevs","title":"Calculate column deviations from central values — colDevs","text":"colDevs calculates column deviations data values central value (mean, median, etc.), possibly stratified grouping variable.","code":""},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate column deviations from central values — colDevs","text":"","code":"colDevs(x, group, center = mean, ...)"},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate column deviations from central values — colDevs","text":"x numeric data frame matrix. group factor (variable can coerced factor) indicating membership observation x one groups. missing, data treated single group. center function used center values (group group specified. function must take vector argument return scalar result. ... Arguments passed ","code":""},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate column deviations from central values — colDevs","text":"numeric matrix containing deviations centering function.","code":""},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate column deviations from central values — colDevs","text":"Conceptually, function similar column-wise sweep, group, allowing arbitrary center function. Non-numeric columns x removed, warning.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate column deviations from central values — colDevs","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate column deviations from central values — colDevs","text":"","code":"data(iris) Species <- iris$Species irisdev <- colDevs(iris[,1:4], Species, mean) irisdev <- colDevs(iris[,1:4], Species, median) # trimmed mean, using an anonymous function irisdev <- colDevs(iris[,1:4], Species, function(x) mean(x, trim=0.25)) # no grouping variable: deviations from column grand means # include all variables (but suppress warning for this doc) irisdev <- suppressWarnings( colDevs(iris) )"},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"function draws covariance ellipses one groups optionally pooled total sample. uses either classical product-moment covariance estimate, robust alternative, provided cov.rob. Provisions provided two variables, scatterplot matrix format.","code":""},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"","code":"covEllipses(x, ...) # S3 method for data.frame covEllipses( x, group, pooled = TRUE, method = c(\"classical\", \"mve\", \"mcd\"), ... ) # S3 method for matrix covEllipses( x, group, pooled = TRUE, method = c(\"classical\", \"mve\", \"mcd\"), ... ) # S3 method for formula covEllipses(x, data, ...) # S3 method for boxM covEllipses(x, ...) # S3 method for default covEllipses( x, means, df, labels = NULL, variables = 1:2, level = 0.68, segments = 60, center = FALSE, center.pch = \"+\", center.cex = 2, col = getOption(\"heplot.colors\", c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"brown\", \"magenta\", \"darkgray\")), lty = 1, lwd = 2, fill = FALSE, fill.alpha = 0.3, label.pos = 0, xlab, ylab, vlabels, var.cex = 2, main = \"\", xlim, ylim, axes = TRUE, offset.axes, add = FALSE, ... )"},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"x generic argument. default method, list covariance matrices. data.frame matrix methods, numeric matrix two columns supplying variables analyzed. ... arguments passed default method plot, text, points group factor defining groups, vector length n=nrow(x) . missing, single covariance ellipse drawn. pooled Logical; TRUE, pooled covariance matrix total sample also computed plotted method covariance method used: classical product-moment (\"classical\"), minimum volume ellipsoid (\"mve\"), minimum covariance determinant (\"mcd\"). data formula method, data.frame evaluate. means default method, matrix means groups (followed grand means, pooled=TRUE). Rows groups, columns variables. assumed means column names corresponding variables covariance matrices. df default method, vector degrees freedom covariance matrices labels Either character vector labels groups, TRUE, indicating group labels taken names covariance matrices. Use labels=\"\" suppress group labels, e.g., add=TRUE variables indices names response variables plotted; defaults 1:2. two variables supplied, function plots pairwise covariance ellipses scatterplot matrix format. level equivalent coverage data ellipse normally-distributed errors, defaults 0.68. segments number line segments composing ellipse; defaults 40. center TRUE, covariance ellipses centered centroid. center.pch character use plotting centroid data; defaults \"+\". center.cex size character use plotting centroid data; defaults 2. col color vector colors use plotting ellipses --- recycled necessary single color can given, case used ellipses. convenience, default colors plots produced given session can changed assigning color vector via options(heplot.colors =c(...). Otherwise, default colors c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\"). lty vector line types use plotting ellipses; first used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single line type can given. Defaults 2:1. lwd vector line widths use plotting ellipses; first used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single line width can given. Defaults 1:2. fill logical vector indicating whether ellipse filled . first value used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single fill value can given. Defaults FALSE backward compatibility. See Details . fill.alpha Alpha transparency filled ellipses, numeric scalar vector values within [0,1], 0 means fully transparent 1 means fully opaque. Defaults 0.3. label.pos Label position, vector integers (0:4) character strings (c(\"center\", \"bottom\", \"left\", \"top\", \"right\")) use labeling ellipses, recycled necessary. Values 1, 2, 3 4, respectively indicate positions , left , right max/min coordinates ellipse; value 0 specifies centroid ellipse object. default, label.pos=NULL uses correlation ellipse determine \"top\" (r>=0) \"bottom\" (r<0). xlab x-axis label; defaults name x variable. ylab y-axis label; defaults name y variable. vlabels Labels variables can also supplied argument, convenient length(variables) > 2. var.cex character size variable labels pairs plot main main plot label; defaults \"\", presently effect. xlim x-axis limits; absent, computed data. ylim y-axis limits; absent, computed data. axes Whether draw x, y axes; defaults TRUE offset.axes proportion extend axes direction computed data; optional. add TRUE, add current plot; default FALSE. argument effect two variables plotted.","code":""},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"Nothing returned. function used side-effect producing plot.","code":""},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"plot methods provide one way visualize possible heterogeneity within-group covariance matrices one-way MANOVA design. covariance matrices nearly equal, covariance ellipses shape. centered common mean, also overlap. can also used visualize difference classical robust covariance matrices.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"","code":"data(iris) # compare classical and robust covariance estimates covEllipses(iris[,1:4], iris$Species) covEllipses(iris[,1:4], iris$Species, fill=TRUE, method=\"mve\", add=TRUE, labels=\"\") # method for a boxM object x <- boxM(iris[, 1:4], iris[, \"Species\"]) x #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: iris[, 1:4] #> Chi-Sq (approx.) = 140.94, df = 20, p-value < 2.2e-16 #> covEllipses(x, fill=c(rep(FALSE,3), TRUE) ) covEllipses(x, fill=c(rep(FALSE,3), TRUE), center=TRUE, label.pos=1:4 ) # method for a list of covariance matrices cov <- c(x$cov, pooled=list(x$pooled)) df <- c(table(iris$Species)-1, nrow(iris)-3) covEllipses(cov, x$means, df, label.pos=3, fill=c(rep(FALSE,3), TRUE)) covEllipses(cov, x$means, df, label.pos=3, fill=c(rep(FALSE,3), TRUE), center=TRUE) # scatterplot matrix version covEllipses(iris[,1:4], iris$Species, fill=c(rep(FALSE,3), TRUE), variables=1:4, fill.alpha=.1)"},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Chi Square Quantile-Quantile plots — cqplot","title":"Chi Square Quantile-Quantile plots — cqplot","text":"chi square quantile-quantile plots show relationship data-based values distributed \\(\\chi^2\\) corresponding quantiles \\(\\chi^2\\) distribution. multivariate analyses, often used assess multivariate normality check outliers, using Mahalanobis squared distances (\\(D^2\\)) observations centroid.","code":""},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Chi Square Quantile-Quantile plots — cqplot","text":"","code":"cqplot(x, ...) # S3 method for mlm cqplot(x, ...) # S3 method for default cqplot( x, method = c(\"classical\", \"mcd\", \"mve\"), detrend = FALSE, pch = 19, col = palette()[1], cex = par(\"cex\"), ref.col = \"red\", ref.lwd = 2, conf = 0.95, env.col = \"gray\", env.lwd = 2, env.lty = 1, env.fill = TRUE, fill.alpha = 0.2, fill.color = trans.colors(ref.col, fill.alpha), labels = if (!is.null(rownames(x))) rownames(x) else 1:nrow(x), id.n, id.method = \"y\", id.cex = 1, id.col = palette()[1], xlab, ylab, main, what = deparse(substitute(x)), ylim, ... )"},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Chi Square Quantile-Quantile plots — cqplot","text":"x either numeric data frame matrix default method, object class \"mlm\" representing multivariate linear model. latter case, residuals model plotted. ... arguments passed methods method estimation method used center covariance, one : \"classical\" (product-moment), \"mcd\" (minimum covariance determinant), \"mve\" (minimum volume ellipsoid). detrend logical; FALSE, plot shows values \\(D^2\\) vs. \\(\\chi^2\\). TRUE, ordinate shows values \\(D^2 - \\chi^2\\) pch plot symbol points. Can vector length equal number rows x. col color points. Can vector length equal number rows x. default first entry current color palette (see palette par. cex character symbol size points. Can vector length equal number rows x. ref.col Color reference line ref.lwd Line width reference line conf confidence coverage approximate confidence envelope env.col line color boundary confidence envelope env.lwd line width confidence envelope env.lty line type confidence envelope env.fill logical; confidence envelope filled? fill.alpha transparency value fill.color fill.color color used fill confidence envelope labels vector text strings used identify points, defaults rownames(x) observation numbers rownames(x) NULL id.n number points labeled. id.n=0, default, point identification occurs. id.method point identification method. default id.method=\"y\" identify id.n points largest value abs(y-mean(y)). See showLabels options. id.cex size text point labels id.col color point labels xlab label horizontal (theoretical quantiles) axis ylab label vertical (empirical quantiles) axis main plot title name object plotted; used construction main specified. ylim limits vertical axis. specified, range confidence envelope used.","code":""},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Chi Square Quantile-Quantile plots — cqplot","text":"Returns invisibly vector squared Mahalanobis distances corresponding rows x residuals model identified points, else NULL","code":""},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Chi Square Quantile-Quantile plots — cqplot","text":"cqplot general version similar functions packages produce chi square QQ plots. allows classical Mahalanobis squared distances well robust estimates based MVE MCD; provides approximate confidence (concentration) envelope around line unit slope, detrended version, reference line horizontal, ability identify label unusual points, graphical features. method \"mlm\" objects applies residuals model. calculation confidence envelope follows used SAS program, http://www.datavis.ca/sasmac/cqplot.html comes Chambers et al. (1983), Section 6.8. essential formula $$ SE ( z_{()} ) = \\hat{\\delta} /g ( q_i)) \\times \\sqrt{ p_i (1-p_i) / n } $$ \\(z_{()}\\) -th order value \\(D^2\\), \\(\\hat{\\delta}\\) estimate slope reference line obtained corresponding quartiles \\(g(q_i)\\) density chi square distribution quantile \\(q_i\\). Note confidence envelope applies \\(D^2\\) computed using classical estimates location scatter. car::qqPlot() function provides simulated envelopes, univariate measure. Oldford (2016) provides general theory methods QQ plots.","code":""},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Chi Square Quantile-Quantile plots — cqplot","text":"J. Chambers, W. S. Cleveland, B. Kleiner, P. . Tukey (1983). Graphical methods data analysis, Wadsworth. R. W. Oldford (2016), \"Self calibrating quantile-quantile plots\", American Statistician, 70, 74-90.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Chi Square Quantile-Quantile plots — cqplot","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Chi Square Quantile-Quantile plots — cqplot","text":"","code":"cqplot(iris[, 1:4]) iris.mod <- lm(as.matrix(iris[,1:4]) ~ Species, data=iris) cqplot(iris.mod, id.n=3) # compare with car::qqPlot car::qqPlot(Mahalanobis(iris[, 1:4]), dist=\"chisq\", df=4) #> [1] 132 135 # Adopted data Adopted.mod <- lm(cbind(Age2IQ, Age4IQ, Age8IQ, Age13IQ) ~ AMED + BMIQ, data=Adopted) cqplot(Adopted.mod, id.n=3) cqplot(Adopted.mod, id.n=3, method=\"mve\") # Sake data Sake.mod <- lm(cbind(taste, smell) ~ ., data=Sake) cqplot(Sake.mod) cqplot(Sake.mod, method=\"mve\", id.n=2) # SocialCog data -- one extreme outlier data(SocialCog) SC.mlm <- lm(cbind(MgeEmotions,ToM, ExtBias, PersBias) ~ Dx, data=SocialCog) cqplot(SC.mlm, id.n=1) # data frame example: stackloss data data(stackloss) cqplot(stackloss[, 1:3], id.n=4) # very strange cqplot(stackloss[, 1:3], id.n=4, detrend=TRUE) cqplot(stackloss[, 1:3], id.n=4, method=\"mve\") cqplot(stackloss[, 1:3], id.n=4, method=\"mcd\")"},{"path":"https://friendly.github.io/heplots/reference/cross3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a 3D cross in an rgl scene — cross3d","title":"Draw a 3D cross in an rgl scene — cross3d","text":"Draws 3D cross axis vectors rgl scene.","code":""},{"path":"https://friendly.github.io/heplots/reference/cross3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a 3D cross in an rgl scene — cross3d","text":"","code":"cross3d(centre = rep(0, 3), scale = rep(1, 3), ...)"},{"path":"https://friendly.github.io/heplots/reference/cross3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a 3D cross in an rgl scene — cross3d","text":"centre scalar vector length 3, giving centre 3D cross scale scalar vector length 3, giving lengths arms 3D cross ... arguments, passed segments3d","code":""},{"path":"https://friendly.github.io/heplots/reference/cross3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw a 3D cross in an rgl scene — cross3d","text":"Used side-effect, returns (invisibly) 6 3 matrix containing end-points three axes, pairs.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/cross3d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw a 3D cross in an rgl scene — cross3d","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/df.terms.html","id":null,"dir":"Reference","previous_headings":"","what":"Find degrees of freedom for model terms — df.terms","title":"Find degrees of freedom for model terms — df.terms","text":"Find degrees freedom model terms","code":""},{"path":"https://friendly.github.io/heplots/reference/df.terms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Find degrees of freedom for model terms — df.terms","text":"","code":"df.terms(model, term, ...) # S3 method for default df.terms(model, term, ...)"},{"path":"https://friendly.github.io/heplots/reference/df.terms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Find degrees of freedom for model terms — df.terms","text":"model model object, fit using lm. term One terms model ... arguments, ignored","code":""},{"path":"https://friendly.github.io/heplots/reference/Diabetes.html","id":null,"dir":"Reference","previous_headings":"","what":"Diabetes Dataset — Diabetes","title":"Diabetes Dataset — Diabetes","text":"Reaven Miller (1979) examined relationship among blood chemistry measures glucose tolerance insulin 145 nonobese adults. used PRIM9 system Stanford Linear Accelerator Center visualize data 3D, discovered peculiar pattern looked like large blob two wings different directions.","code":""},{"path":"https://friendly.github.io/heplots/reference/Diabetes.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Diabetes Dataset — Diabetes","text":"data frame 145 observations following 6 variables. relwt relative weight, expressed ratio actual weight expected weight, given person's height, numeric vector glufast fasting plasma glucose level, numeric vector glutest test plasma glucose level, measure glucose intolerance, numeric vector instest plasma insulin test, measure insulin response oral glucose, numeric vector sspg steady state plasma glucose, measure insulin resistance, numeric vector group diagnostic group, factor levels Normal Chemical_Diabetic Overt_Diabetic","code":""},{"path":"https://friendly.github.io/heplots/reference/Diabetes.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Diabetes Dataset — Diabetes","text":"Andrews, D. F. & Herzberg, . M. (1985). Data: Collection Problems Many Fields Student Research Worker, Springer-Verlag, Ch. 36. Friendly, M. (1991). SAS System Statistical Graphics, Cary, NC: SAS Institute.","code":""},{"path":"https://friendly.github.io/heplots/reference/Diabetes.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Diabetes Dataset — Diabetes","text":"analysis, subjects classified subclinical (chemical) diabetics, overt diabetics normals. study influential defining stages development Type 2 diabetes. Overt diabetes advanced stage, characterized elevated fasting blood glucose concentration classical symptoms. Preceding overt diabetes latent chemical diabetic stage, symptoms diabetes demonstrable abnormality oral intravenous glucose tolerance. glutest defined \"area plasma glucose curve three hour oral glucose tolerance test.\" Reaven & Miller refer variable \"Glucose area\". instest defined \"area plasma insulin curve\", referred paper \"Insulin area\". study influential defining stages development Type 2 diabetes. Overt diabetes advanced stage, characterized elevated fasting blood glucose concentration classical symptoms. Preceding overt diabetes latent chemical diabetic stage, symptoms diabetes demonstrable abnormality oral intravenous glucose tolerance.","code":""},{"path":"https://friendly.github.io/heplots/reference/Diabetes.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Diabetes Dataset — Diabetes","text":"Reaven, G. M. Miller, R. G. (1979). attempt define nature chemical diabetes using multidimensional analysis. Diabetologia, 16, 17-24.","code":""},{"path":"https://friendly.github.io/heplots/reference/Diabetes.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Diabetes Dataset — Diabetes","text":"","code":"data(Diabetes) col <- c(\"blue\", \"red\", \"darkgreen\")[Diabetes$group] pch <- c(16,15,17)[Diabetes$group] # a perplexing plot, similar to Fig 2, but with a loess smooth plot(instest ~ glutest, data=Diabetes, pch=16, cex.lab=1.25, xlab=\"Glucose area (glutest)\", ylab=\"Insulin area (instest)\") lines( loess.smooth(Diabetes$glutest, Diabetes$instest), col=\"blue\", lwd=2) # scatterplot matrix, colored by group plot(Diabetes[,1:5], col=col, pch=pch) # covariance ellipses covEllipses(Diabetes[,2:5], Diabetes$group, fill=TRUE, pooled=FALSE, col=col) covEllipses(Diabetes[,2:5], Diabetes$group, fill=TRUE, pooled=FALSE, col=col, variables=1:4) # Box's M test diab.boxm <- boxM(Diabetes[,2:5], Diabetes$group) diab.boxm #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: Diabetes[, 2:5] #> Chi-Sq (approx.) = 382.84, df = 20, p-value < 2.2e-16 #> plot(diab.boxm) # heplots diab.mlm <- lm(cbind(glufast, glutest, instest, sspg) ~ group, data=Diabetes) heplot(diab.mlm) pairs(diab.mlm, fill=TRUE, fill.alpha=0.1)"},{"path":"https://friendly.github.io/heplots/reference/ellipse.axes.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","title":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","text":"function draw principal axes 2D ellipse correlation, covariance sums squares cross products matrix existing plot.","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse.axes.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","text":"","code":"ellipse.axes( x, centre = c(0, 0), center = center, scale = c(1, 1), which = 1:2, level = 0.95, radius = sqrt(qchisq(level, 2)), labels = TRUE, label.ends = c(2, 4), label.pos = c(2, 4, 1, 3), ... )"},{"path":"https://friendly.github.io/heplots/reference/ellipse.axes.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","text":"x square positive definite matrix least 2x2 size. treated correlation covariance multivariate normal distribution. centre, center center ellipse scale x correlation matrix, standard deviations parameter can given scale parameter. defaults c(1, 1), rescaling done. integer vector select variables object x plotted. default first 2. level coverage level simultaneous region ellipse. default 0.95, 95% region. used control size ellipse. radius size ellipsoid may also controlled specifying value t-statistic boundary. defaults square root chi-square statistic given level 2 degrees freedom, however small sample n observations, accurate value sqrt(2 * qf(level, 2, n - 1 )). labels Either logical value, character string, character vector length 2. TRUE, default, axes labeled \"PC1\", \"PC2\". single character string, digits 1, 2 pasted end. label.ends vector indices range 1:4 indicating ends axes labeled, corresponding selection rows 4 x 2 matrix axes end points. Values 1:2 represent minimum maximum first dimension respectively. Values 3:4 represent minimum maximum second dimension. Default: c(2, 4). label.pos Positions text labels relative ends axes used text four possible label.ends. 1, 2, 3, 4 represent , left, right. default, c(2, 4, 1, 3), positions labels outside axes. ... arguments passed lines text.","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse.axes.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","text":"Invisibly returns 4 x 2 matrix containing end points axes pairs (min, max) rows.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/ellipse.axes.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse.axes.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","text":"","code":"data(iris) cov <- cov(iris[,1:2]) mu <- colMeans(iris[,1:2]) radius <- sqrt(qchisq(0.68, 2)) plot(iris[,1:2], asp=1) car::ellipse(mu, cov, radius = radius) res <- ellipse.axes(cov, center=mu, level = 0.68, labels = TRUE) res #> Sepal.Length Sepal.Width #> Xmin -1.24882344 0.1061294 #> Xmax 1.24882344 -0.1061294 #> Ymin -0.05518532 -0.6493648 #> Ymax 0.05518532 0.6493648"},{"path":"https://friendly.github.io/heplots/reference/ellipse.box.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw Conjugate Axes and Parallelogram Surrounding a Covariance Ellipse — ellipse.box","title":"Draw Conjugate Axes and Parallelogram Surrounding a Covariance Ellipse — ellipse.box","text":"Draw Conjugate Axes Parallelogram Surrounding Covariance Ellipse","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse.box.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw Conjugate Axes and Parallelogram Surrounding a Covariance Ellipse — ellipse.box","text":"","code":"ellipse.box( x, center = c(0, 0), which = 1:2, level = 0.95, radius = sqrt(qchisq(level, 2)), factor = c(\"cholesky\", \"pca\"), draw = c(\"box\", \"diameters\", \"both\"), ... )"},{"path":"https://friendly.github.io/heplots/reference/ellipse.box.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw Conjugate Axes and Parallelogram Surrounding a Covariance Ellipse — ellipse.box","text":"x square positive definite matrix least 2x2 size. treated correlation covariance multivariate normal distribution. center center ellipse integer vector select variables object x plotted. default first 2. level coverage level simultaneous region ellipse. default 0.95, 95% region. used control size ellipse. radius size ellipsoid may also controlled specifying value t-statistic boundary. defaults square root chi-square statistic given level 2 degrees freedom, however small sample n observations, accurate value sqrt(2 * qf(level, 2, n - 1 )). factor function defining conjugate axes used transform unit circle ellipse. chol, uses right Cholesky factor x. draw draw? \"box\", \"diameters\" \"\" ... arguments passed lines.","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse.box.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw Conjugate Axes and Parallelogram Surrounding a Covariance Ellipse — ellipse.box","text":"Invisibly returns 2 column matrix containing end points lines.","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse.box.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw Conjugate Axes and Parallelogram Surrounding a Covariance Ellipse — ellipse.box","text":"","code":"data(iris) cov <- cov(iris[,3:4]) mu <- colMeans(iris[,3:4]) radius <- sqrt(qchisq(0.68, 2)) plot(iris[,3:4], asp=1) car::ellipse(mu, cov, radius = radius) ellipse.axes(cov, center=mu, level = 0.68, labels = TRUE) ellipse.box(cov, center=mu, level = 0.68, factor = \"pca\", col = \"red\", lwd = 2 ) res <- ellipse.box(cov, center=mu, level = 0.68, factor = \"chol\", col = \"green\", lwd = 2 ) res #> Petal.Length Petal.Width #> [1,] 6.42288 2.6179312 #> [2,] 1.09312 0.4020543 #> [3,] 1.09312 -0.2192645 #> [4,] 6.42288 1.9966124 #> [5,] 6.42288 2.6179312"},{"path":"https://friendly.github.io/heplots/reference/ellipse3d.axes.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw axes of a 3D ellipsoid — ellipse3d.axes","title":"Draw axes of a 3D ellipsoid — ellipse3d.axes","text":"function draw major axes 3D ellipsoid correlation, covariance sums squares cross products matrix.","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse3d.axes.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw axes of a 3D ellipsoid — ellipse3d.axes","text":"","code":"ellipse3d.axes( x, centre = c(0, 0, 0), center = centre, scale = c(1, 1, 1), level = 0.95, t = sqrt(qchisq(level, 3)), which = 1:3, labels = TRUE, label.ends = c(2, 4, 6), ... )"},{"path":"https://friendly.github.io/heplots/reference/ellipse3d.axes.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw axes of a 3D ellipsoid — ellipse3d.axes","text":"x square positive definite matrix least 3x3 size. treated correlation covariance multivariate normal distribution. centre, center center ellipse scale x correlation matrix, standard deviations parameter can given scale parameter. defaults c(1, 1, 1), rescaling done. level coverage level simultaneous region. default 0.95, 95% region. used control size ellipsoid. t size ellipsoid may also controlled specifying value t-statistic boundary, defaults square root chi-square statistic given level 3 degrees freedom. integer vector select variables object plotted. default first 3. labels Either logical value, character string, character vector length 3. TRUE, default, axes labeled PC1, PC2, PC3. single character string, digits 1, 2, 3 pasted end. label.ends vector length 3 indicating ends axes labeled, corresponding selection rows 6 x 3 matrix axes end points. Default: c(2,4,6). ... arguments passed segments3d text3d.","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse3d.axes.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw axes of a 3D ellipsoid — ellipse3d.axes","text":"Returns 6 x 3 matrix containing end points three axis lines pairs rows.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/ellipse3d.axes.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw axes of a 3D ellipsoid — ellipse3d.axes","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse3d.axes.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw axes of a 3D ellipsoid — ellipse3d.axes","text":"3D plot","code":"data(iris) iris3 <- iris[,1:3] cov <- cov(iris3) mu <- colMeans(iris3) col <-c(\"blue\", \"green\", \"red\")[iris$Species] library(rgl) #> Warning: package 'rgl' was built under R version 4.3.3 #> #> Attaching package: 'rgl' #> The following objects are masked from 'package:heplots': #> #> arrow3d, bbox3d plot3d(iris3, type=\"s\", size=0.4, col=col, cex=2, box=FALSE, aspect=\"iso\") plot3d( ellipse3d(cov, centre=mu, level=0.68), col=\"gray\", alpha=0.2, add = TRUE) 3D plot {\"x\":{\"material\":{\"color\":\"#000000\",\"alpha\":1,\"lit\":true,\"ambient\":\"#000000\",\"specular\":\"#FFFFFF\",\"emission\":\"#000000\",\"shininess\":50,\"smooth\":true,\"front\":\"filled\",\"back\":\"filled\",\"size\":3,\"lwd\":1,\"fog\":true,\"point_antialias\":false,\"line_antialias\":false,\"texture\":null,\"textype\":\"rgb\",\"texmode\":\"modulate\",\"texmipmap\":false,\"texminfilter\":\"linear\",\"texmagfilter\":\"linear\",\"texenvmap\":false,\"depth_mask\":true,\"depth_test\":\"less\",\"isTransparent\":false,\"polygon_offset\":[0,0],\"margin\":\"\",\"floating\":false,\"tag\":\"\",\"blend\":[\"src_alpha\",\"one_minus_src_alpha\"]},\"rootSubscene\":7,\"objects\":{\"44\":{\"id\":44,\"type\":\"spheres\",\"material\":{},\"vertices\":\"0\",\"colors\":\"1\",\"radii\":[[0.02816091291606426]],\"centers\":\"2\",\"ignoreExtent\":false,\"fastTransparency\":true,\"flags\":32771},\"46\":{\"id\":46,\"type\":\"text\",\"material\":{\"lit\":false,\"margin\":0,\"floating\":true,\"edge\":[0,1,1]},\"vertices\":\"3\",\"colors\":\"4\",\"texts\":[[\"Sepal.Length\"]],\"cex\":[[1]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"5\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":true,\"flags\":33808},\"47\":{\"id\":47,\"type\":\"text\",\"material\":{\"lit\":false,\"margin\":1,\"floating\":true,\"edge\":[1,1,1]},\"vertices\":\"6\",\"colors\":\"7\",\"texts\":[[\"Sepal.Width\"]],\"cex\":[[1]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"8\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":true,\"flags\":33808},\"48\":{\"id\":48,\"type\":\"text\",\"material\":{\"lit\":false,\"margin\":2,\"floating\":true,\"edge\":[1,1,1]},\"vertices\":\"9\",\"colors\":\"10\",\"texts\":[[\"Petal.Length\"]],\"cex\":[[1]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"11\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":true,\"flags\":33808},\"49\":{\"id\":49,\"type\":\"quads\",\"material\":{\"alpha\":0.2000000029802322,\"isTransparent\":true},\"vertices\":\"12\",\"colors\":\"14\",\"centers\":\"15\",\"normals\":\"13\",\"ignoreExtent\":false,\"flags\":32811},\"11\":{\"id\":11,\"type\":\"light\",\"vertices\":[[0,0,1]],\"colors\":[[1,1,1,1],[1,1,1,1],[1,1,1,1]],\"viewpoint\":true,\"finite\":false},\"15\":{\"id\":15,\"type\":\"background\",\"material\":{\"lit\":false,\"back\":\"lines\"},\"colors\":\"16\",\"centers\":\"17\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"45\":{\"id\":45,\"type\":\"bboxdeco\",\"material\":{\"front\":\"lines\",\"back\":\"lines\"},\"vertices\":\"18\",\"colors\":\"19\",\"axes\":{\"mode\":[\"pretty\",\"pretty\",\"pretty\"],\"step\":[1,0.5,1],\"nticks\":[5,5,5],\"marklen\":[15,15,15],\"expand\":[1.029999971389771,1.029999971389771,1.029999971389771]},\"draw_front\":false,\"flags\":32769},\"7\":{\"id\":7,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":7,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,19.43376731872559],\"modelMatrix\":[[1,0,0,-6.099999904632568],[0,0.9659258127212524,-0.258819043636322,-2.11832070350647],[0,0.258819043636322,0.9659258127212524,-23.89193725585938],[0,0,0,1]],\"projMatrix\":[[3.732050895690918,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-70.05648040771484],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.9659258127212524,-0.258819043636322,0],[0,0.258819043636322,0.9659258127212524,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[4.271839141845703,7.928161144256592,1.971839070320129,4.428161144256592,0.4538158178329468,7.06218433380127],\"windowRect\":[34,57,290,313],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"TT Arial\",\"maxClipPlanes\":8,\"glVersion\":4.6,\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"replace\"},\"objects\":[15,45,44,46,47,48,49,11],\"subscenes\":[],\"flags\":34107}},\"crosstalk\":{\"key\":[],\"group\":[],\"id\":[],\"options\":[]},\"width\":700,\"height\":700,\"buffer\":{\"accessors\":[{\"bufferView\":0,\"componentType\":5126,\"count\":150,\"type\":\"VEC3\"},{\"bufferView\":1,\"componentType\":5121,\"count\":150,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":2,\"componentType\":5126,\"count\":150,\"type\":\"VEC3\"},{\"bufferView\":3,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":4,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":5,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":6,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":7,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":8,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":9,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":10,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":11,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":12,\"componentType\":5126,\"count\":1536,\"type\":\"VEC3\"},{\"bufferView\":13,\"componentType\":5126,\"count\":1536,\"type\":\"VEC3\"},{\"bufferView\":14,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":15,\"componentType\":5126,\"count\":384,\"type\":\"VEC3\"},{\"bufferView\":16,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":17,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":18,\"componentType\":5126,\"count\":15,\"type\":\"VEC3\"},{\"bufferView\":19,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":1800,\"byteOffset\":0},{\"buffer\":0,\"byteLength\":600,\"byteOffset\":1800},{\"buffer\":0,\"byteLength\":1800,\"byteOffset\":2400},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":4200},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":4212},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":4216},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":4228},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":4240},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":4244},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":4256},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":4268},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":4272},{\"buffer\":0,\"byteLength\":18432,\"byteOffset\":4284},{\"buffer\":0,\"byteLength\":18432,\"byteOffset\":22716},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":41148},{\"buffer\":0,\"byteLength\":4608,\"byteOffset\":41164},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":45772},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":45776},{\"buffer\":0,\"byteLength\":180,\"byteOffset\":45780},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":45960}],\"buffers\":[{\"byteLength\":45964,\"bytes\":\"MzOjQAAAYEAzM7M/zcycQAAAQEAzM7M/ZmaWQM3MTEBmZqY/MzOTQGZmRkAAAMA/AACgQGZm\\nZkAzM7M/zcysQJqZeUCamdk/MzOTQJqZWUAzM7M/AACgQJqZWUAAAMA/zcyMQJqZOUAzM7M/\\nzcycQGZmRkAAAMA/zcysQM3MbEAAAMA/mpmZQJqZWUDNzMw/mpmZQAAAQEAzM7M/mpmJQAAA\\nQEDNzIw/mpm5QAAAgECamZk/Zma2QM3MjEAAAMA/zcysQJqZeUBmZqY/MzOjQAAAYEAzM7M/\\nZma2QDMzc0Camdk/MzOjQDMzc0AAAMA/zcysQJqZWUCamdk/MzOjQM3MbEAAAMA/MzOTQGZm\\nZkAAAIA/MzOjQDMzU0Camdk/mpmZQJqZWUAzM/M/AACgQAAAQEDNzMw/AACgQJqZWUDNzMw/\\nZmamQAAAYEAAAMA/ZmamQJqZWUAzM7M/ZmaWQM3MTEDNzMw/mpmZQGZmRkDNzMw/zcysQJqZ\\nWUAAAMA/ZmamQDMzg0AAAMA/AACwQGZmhkAzM7M/zcycQGZmRkAAAMA/AACgQM3MTECamZk/\\nAACwQAAAYEBmZqY/zcycQGZmZkAzM7M/zcyMQAAAQEBmZqY/MzOjQJqZWUAAAMA/AACgQAAA\\nYEBmZqY/AACQQDMzE0BmZqY/zcyMQM3MTEBmZqY/AACgQAAAYEDNzMw/MzOjQDMzc0AzM/M/\\nmpmZQAAAQEAzM7M/MzOjQDMzc0DNzMw/MzOTQM3MTEAzM7M/mpmpQM3MbEAAAMA/AACgQDMz\\nU0AzM7M/AADgQM3MTEBmZpZAzczMQM3MTEAAAJBAzczcQGZmRkDNzJxAAACwQDMzE0AAAIBA\\nAADQQDMzM0AzM5NAZma2QDMzM0AAAJBAmpnJQDMzU0BmZpZAzcycQJqZGUAzM1NAMzPTQJqZ\\nOUAzM5NAZmamQM3MLECamXlAAACgQAAAAEAAAGBAzcy8QAAAQEBmZoZAAADAQM3MDEAAAIBA\\nMzPDQJqZOUBmZpZAMzOzQJqZOUBmZmZAZmbWQGZmRkDNzIxAMzOzQAAAQEAAAJBAmpm5QM3M\\nLEAzM4NAZmbGQM3MDEAAAJBAMzOzQAAAIECamXlAzcy8QM3MTECamZlAMzPDQDMzM0AAAIBA\\nmpnJQAAAIEDNzJxAMzPDQDMzM0BmZpZAzczMQJqZOUCamYlAMzPTQAAAQEDNzIxAmpnZQDMz\\nM0CamZlAZmbWQAAAQEAAAKBAAADAQJqZOUAAAJBAZma2QGZmJkAAAGBAAACwQJqZGUAzM3NA\\nAACwQJqZGUDNzGxAmpm5QM3MLECamXlAAADAQM3MLEAzM6NAzcysQAAAQEAAAJBAAADAQJqZ\\nWUAAAJBAZmbWQGZmRkBmZpZAmpnJQDMzE0DNzIxAMzOzQAAAQEAzM4NAAACwQAAAIEAAAIBA\\nAACwQGZmJkDNzIxAMzPDQAAAQEAzM5NAmpm5QGZmJkAAAIBAAACgQDMzE0AzM1NAMzOzQM3M\\nLEBmZoZAZma2QAAAQEBmZoZAZma2QJqZOUBmZoZAZmbGQJqZOUCamYlAMzOjQAAAIEAAAEBA\\nZma2QDMzM0AzM4NAmpnJQDMzU0AAAMBAmpm5QM3MLEAzM6NAMzPjQAAAQEDNzLxAmpnJQJqZ\\nOUAzM7NAAADQQAAAQECamblAMzPzQAAAQEAzM9NAzcycQAAAIEAAAJBAmpnpQJqZOUCamclA\\nZmbWQAAAIECamblAZmbmQGZmZkAzM8NAAADQQM3MTEAzM6NAzczMQM3MLECamalAmpnZQAAA\\nQEAAALBAZma2QAAAIEAAAKBAmpm5QDMzM0AzM6NAzczMQM3MTECamalAAADQQAAAQEAAALBA\\nZmb2QDMzc0BmZtZAZmb2QGZmJkDNzNxAAADAQM3MDEAAAKBAzczcQM3MTEBmZrZAMzOzQDMz\\nM0DNzJxAZmb2QDMzM0BmZtZAmpnJQM3MLEDNzJxAZmbWQDMzU0BmZrZAZmbmQM3MTEAAAMBA\\nZmbGQDMzM0CamZlAMzPDQAAAQEDNzJxAzczMQDMzM0AzM7NAZmbmQAAAQECamblAzczsQDMz\\nM0AzM8NAzcz8QDMzc0DNzMxAzczMQDMzM0AzM7NAmpnJQDMzM0AzM6NAMzPDQGZmJkAzM7NA\\nZmb2QAAAQEAzM8NAmpnJQJqZWUAzM7NAzczMQGZmRkAAALBAAADAQAAAQECamZlAzczcQGZm\\nRkDNzKxAZmbWQGZmRkAzM7NAzczcQGZmRkAzM6NAmpm5QM3MLEAzM6NAmpnZQM3MTEDNzLxA\\nZmbWQDMzU0BmZrZAZmbWQAAAQEBmZqZAmpnJQAAAIEAAAKBAAADQQAAAQEBmZqZAZmbGQJqZ\\nWUDNzKxAzcy8QAAAQEAzM6NAAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//\\nAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA\\n//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//\\nAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA\\n//8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/\\nAP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/\\nAP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/\\nAP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A//8AAP//AAD//wAA//8A\\nAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/\\n/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A\\nAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/\\n/wAA//8AAP//AAD//wAA//8AAP//AAD/MzOjQAAAYEAzM7M/zcycQAAAQEAzM7M/ZmaWQM3M\\nTEBmZqY/MzOTQGZmRkAAAMA/AACgQGZmZkAzM7M/zcysQJqZeUCamdk/MzOTQJqZWUAzM7M/\\nAACgQJqZWUAAAMA/zcyMQJqZOUAzM7M/zcycQGZmRkAAAMA/zcysQM3MbEAAAMA/mpmZQJqZ\\nWUDNzMw/mpmZQAAAQEAzM7M/mpmJQAAAQEDNzIw/mpm5QAAAgECamZk/Zma2QM3MjEAAAMA/\\nzcysQJqZeUBmZqY/MzOjQAAAYEAzM7M/Zma2QDMzc0Camdk/MzOjQDMzc0AAAMA/zcysQJqZ\\nWUCamdk/MzOjQM3MbEAAAMA/MzOTQGZmZkAAAIA/MzOjQDMzU0Camdk/mpmZQJqZWUAzM/M/\\nAACgQAAAQEDNzMw/AACgQJqZWUDNzMw/ZmamQAAAYEAAAMA/ZmamQJqZWUAzM7M/ZmaWQM3M\\nTEDNzMw/mpmZQGZmRkDNzMw/zcysQJqZWUAAAMA/ZmamQDMzg0AAAMA/AACwQGZmhkAzM7M/\\nzcycQGZmRkAAAMA/AACgQM3MTECamZk/AACwQAAAYEBmZqY/zcycQGZmZkAzM7M/zcyMQAAA\\nQEBmZqY/MzOjQJqZWUAAAMA/AACgQAAAYEBmZqY/AACQQDMzE0BmZqY/zcyMQM3MTEBmZqY/\\nAACgQAAAYEDNzMw/MzOjQDMzc0AzM/M/mpmZQAAAQEAzM7M/MzOjQDMzc0DNzMw/MzOTQM3M\\nTEAzM7M/mpmpQM3MbEAAAMA/AACgQDMzU0AzM7M/AADgQM3MTEBmZpZAzczMQM3MTEAAAJBA\\nzczcQGZmRkDNzJxAAACwQDMzE0AAAIBAAADQQDMzM0AzM5NAZma2QDMzM0AAAJBAmpnJQDMz\\nU0BmZpZAzcycQJqZGUAzM1NAMzPTQJqZOUAzM5NAZmamQM3MLECamXlAAACgQAAAAEAAAGBA\\nzcy8QAAAQEBmZoZAAADAQM3MDEAAAIBAMzPDQJqZOUBmZpZAMzOzQJqZOUBmZmZAZmbWQGZm\\nRkDNzIxAMzOzQAAAQEAAAJBAmpm5QM3MLEAzM4NAZmbGQM3MDEAAAJBAMzOzQAAAIECamXlA\\nzcy8QM3MTECamZlAMzPDQDMzM0AAAIBAmpnJQAAAIEDNzJxAMzPDQDMzM0BmZpZAzczMQJqZ\\nOUCamYlAMzPTQAAAQEDNzIxAmpnZQDMzM0CamZlAZmbWQAAAQEAAAKBAAADAQJqZOUAAAJBA\\nZma2QGZmJkAAAGBAAACwQJqZGUAzM3NAAACwQJqZGUDNzGxAmpm5QM3MLECamXlAAADAQM3M\\nLEAzM6NAzcysQAAAQEAAAJBAAADAQJqZWUAAAJBAZmbWQGZmRkBmZpZAmpnJQDMzE0DNzIxA\\nMzOzQAAAQEAzM4NAAACwQAAAIEAAAIBAAACwQGZmJkDNzIxAMzPDQAAAQEAzM5NAmpm5QGZm\\nJkAAAIBAAACgQDMzE0AzM1NAMzOzQM3MLEBmZoZAZma2QAAAQEBmZoZAZma2QJqZOUBmZoZA\\nZmbGQJqZOUCamYlAMzOjQAAAIEAAAEBAZma2QDMzM0AzM4NAmpnJQDMzU0AAAMBAmpm5QM3M\\nLEAzM6NAMzPjQAAAQEDNzLxAmpnJQJqZOUAzM7NAAADQQAAAQECamblAMzPzQAAAQEAzM9NA\\n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\\nb0B16yFAy7GZQDaYakDJ5rw/JLabQIA8aEBnuuY/8LSjQOdabUDvJApA+ZSiQH+HcECIBu4/\\nlvy6QK1YaEBz03VAlvy6QIuXb0B3pV5A3C2yQJ8tcEAheT1AyrOyQFrbaECh9VZAlvy6QG4q\\ndEBg40pAC6+xQCdvdED5GClA3C2yQJ8tcEAheT1Alvy6QIuXb0B3pV5A2xKqQOE0c0D+Cw9A\\nJLqqQGqFb0B16yFA3C2yQJ8tcEAheT1AC6+xQCdvdED5GClANFarQDhpaEDRYjtAyrOyQFrb\\naECh9VZA3C2yQJ8tcEAheT1AJLqqQGqFb0B16yFAlvy6QNyJd0AmFCtAJg+yQAHMd0CXBwtA\\nadCxQJ/edkBfoBlAlvy6QCOxdkDEDjpAN2OpQA9YdkAwXNw/Z6SpQPNtdUAMef0/adCxQJ/e\\ndkBfoBlAJg+yQAHMd0CXBwtA2xKqQOE0c0D+Cw9AC6+xQCdvdED5GClAadCxQJ/edkBfoBlA\\nZ6SpQPNtdUAMef0/lvy6QG4qdEBg40pAlvy6QCOxdkDEDjpAadCxQJ/edkBfoBlAC6+xQCdv\\ndED5GClATOeXQEmwbEA7EHQ/YmWYQN4cbECbxJg/5E+hQA5EckATPsk/dZigQL/bckBqP6c/\\ny7GZQDaYakDJ5rw/+ZSiQH+HcECIBu4/5E+hQA5EckATPsk/YmWYQN4cbECbxJg/2xKqQOE0\\nc0D+Cw9AZ6SpQPNtdUAMef0/5E+hQA5EckATPsk/+ZSiQH+HcECIBu4/N2OpQA9YdkAwXNw/\\ndZigQL/bckBqP6c/5E+hQA5EckATPsk/Z6SpQPNtdUAMef0/x6HXQBMSXkAnqa9ACUPaQJd+\\nYEB+7a1APETSQKiXZ0CumZtApXfRQD+VYUBIZ6RAYUfcQHxaYkDG96pAM2TTQPd8akAsN5ZA\\nPETSQKiXZ0CumZtACUPaQJd+YEB+7a1AUubLQBkFb0AIY4ZACD/LQAx/a0D7ZI1APETSQKiX\\nZ0CumZtAM2TTQPd8akAsN5ZA+KLKQHuJZECY3JdApXfRQD+VYUBIZ6RAPETSQKiXZ0CumZtA\\nCD/LQAx/a0D7ZI1A4BHeQBEBZEBG6KBAt2DVQFdTbEB754tASanUQA7pa0BbvZFAy5PdQNyM\\nY0DCwqZA9ZXMQM38cUDSAXFAxVTMQNUicUCqq39ASanUQA7pa0BbvZFAt2DVQFdTbEB754tA\\n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\\nb3npvlgKWD/QtJC+08FZvr0AdT9n1Em+IbL8vTe1ET4ta3u/GlM6v4rGDz/QeMm+b3npvlgK\\nWD/QtJC+8vllO2n8KT9qaj+/PNNLvyzkGj8AAAAAqTccv4DPSj8AAAAAb3npvlgKWD/QtJC+\\nGlM6v4rGDz/QeMm+uqOUPjLoZr/eo6O+NUi0PofYYb+mDaC+U25ePvg/cb/7Q4K+mTwiPniC\\ncr9vjI6+mXLOPlvQXL++fJy+ZemLPu4Hbr8ydXy+U25ePvg/cb/7Q4K+NUi0PofYYb+mDaC+\\nD5ATPpCveL9ZGUG+hcSaPbFKer86oUi+U25ePvg/cb/7Q4K+ZemLPu4Hbr8ydXy+aK92vHXc\\neb/oXl6+mTwiPniCcr9vjI6+U25ePvg/cb/7Q4K+hcSaPbFKer86oUi+nvj6PmNSUr89DZW+\\n4U3IPvFvY79M23W+YuCpPslLab9Ln3m+jhnlPnjLV78q7pi+QD+NPta3cb/0Mzi+Y15SPqcW\\ndr+XEDy+YuCpPslLab9Ln3m+4U3IPvFvY79M23W+D5ATPpCveL9ZGUG+ZemLPu4Hbr8ydXy+\\nYuCpPslLab9Ln3m+Y15SPqcWdr+XEDy+mXLOPlvQXL++fJy+jhnlPnjLV78q7pi+YuCpPslL\\nab9Ln3m+ZemLPu4Hbr8ydXy+A/98vd6Cf78AAAAABVEfvvbhfL8AAAAA1A1pPfAMfr+KvN+9\\ndQ0IPjtSfL86otW9Me2AvjjAd78AAAAATlRivFRDfr/qe+y91A1pPfAMfr+KvN+9BVEfvvbh\\nfL8AAAAAD5ATPpCveL9ZGUG+Y15SPqcWdr+XEDy+1A1pPfAMfr+KvN+9TlRivFRDfr/qe+y9\\nQD+NPta3cb/0Mzi+dQ0IPjtSfL86otW91A1pPfAMfr+KvN+9Y15SPqcWdr+XEDy+LjMBv2EB\\nXb8AAAAA2Kxxvsqadr/H8gK+cZzevbmrfL+aivK9zyC6viZ8br8AAAAAaK92vHXceb/oXl6+\\nhcSaPbFKer86oUi+cZzevbmrfL+aivK92Kxxvsqadr/H8gK+D5ATPpCveL9ZGUG+TlRivFRD\\nfr/qe+y9cZzevbmrfL+aivK9hcSaPbFKer86oUi+Me2AvjjAd78AAAAAzyC6viZ8br8AAAAA\\ncZzevbmrfL+aivK9TlRivFRDfr/qe+y9jXwiP6h2Or/KJIS+8gkcP222Qr8I6GS+xPQHP6tq\\n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\\nwH8AAOBAAAAAAQ==\"}]},\"context\":{\"shiny\":false,\"rmarkdown\":null},\"vertexShader\":\"#line 2 1\\n// File 1 is the vertex shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\n\\nattribute vec3 aPos;\\nattribute vec4 aCol;\\nuniform mat4 mvMatrix;\\nuniform mat4 prMatrix;\\nvarying vec4 vCol;\\nvarying vec4 vPosition;\\n\\n#ifdef NEEDS_VNORMAL\\nattribute vec3 aNorm;\\nuniform mat4 normMatrix;\\nvarying vec4 vNormal;\\n#endif\\n\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nattribute vec2 aTexcoord;\\nvarying vec2 vTexcoord;\\n#endif\\n\\n#ifdef FIXED_SIZE\\nuniform vec3 textScale;\\n#endif\\n\\n#ifdef FIXED_QUADS\\nattribute vec3 aOfs;\\n#endif\\n\\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\nvarying float normz;\\nuniform mat4 invPrMatrix;\\n#else\\nattribute vec3 aPos1;\\nattribute vec3 aPos2;\\nvarying float normz;\\n#endif\\n#endif // IS_TWOSIDED\\n\\n#ifdef FAT_LINES\\nattribute vec3 aNext;\\nattribute vec2 aPoint;\\nvarying vec2 vPoint;\\nvarying float vLength;\\nuniform float uAspect;\\nuniform float uLwd;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n \\n#ifndef IS_BRUSH\\n#if defined(NCLIPPLANES) || !defined(FIXED_QUADS) || defined(HAS_FOG) || defined(USE_ENVMAP)\\n vPosition = mvMatrix * vec4(aPos, 1.);\\n#endif\\n \\n#ifndef FIXED_QUADS\\n gl_Position = prMatrix * vPosition;\\n#endif\\n#endif // !IS_BRUSH\\n \\n#ifdef IS_POINTS\\n gl_PointSize = POINTSIZE;\\n#endif\\n \\n vCol = aCol;\\n \\n// USE_ENVMAP implies NEEDS_VNORMAL\\n\\n#ifdef NEEDS_VNORMAL\\n vNormal = normMatrix * vec4(-aNorm, dot(aNorm, aPos));\\n#endif\\n\\n#ifdef USE_ENVMAP\\n vReflection = normalize(reflect(vPosition.xyz/vPosition.w, \\n normalize(vNormal.xyz/vNormal.w)));\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\n /* normz should be calculated *after* projection */\\n normz = (invPrMatrix*vNormal).z;\\n#else\\n vec4 pos1 = prMatrix*(mvMatrix*vec4(aPos1, 1.));\\n pos1 = pos1/pos1.w - gl_Position/gl_Position.w;\\n vec4 pos2 = prMatrix*(mvMatrix*vec4(aPos2, 1.));\\n pos2 = pos2/pos2.w - gl_Position/gl_Position.w;\\n normz = pos1.x*pos2.y - pos1.y*pos2.x;\\n#endif\\n#endif // IS_TWOSIDED\\n \\n#ifdef NEEDS_VNORMAL\\n vNormal = vec4(normalize(vNormal.xyz), 1);\\n#endif\\n \\n#if defined(HAS_TEXTURE) || defined(IS_TEXT)\\n vTexcoord = aTexcoord;\\n#endif\\n \\n#if defined(FIXED_SIZE) && !defined(ROTATING)\\n vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w;\\n gl_Position = pos + vec4(aOfs*textScale, 0.);\\n#endif\\n \\n#if defined(IS_SPRITES) && !defined(FIXED_SIZE)\\n vec4 pos = mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w + vec4(aOfs, 0.);\\n gl_Position = prMatrix*pos;\\n#endif\\n \\n#ifdef FAT_LINES\\n /* This code was inspired by Matt Deslauriers' code in \\n https://mattdesl.svbtle.com/drawing-lines-is-hard */\\n vec2 aspectVec = vec2(uAspect, 1.0);\\n mat4 projViewModel = prMatrix * mvMatrix;\\n vec4 currentProjected = projViewModel * vec4(aPos, 1.0);\\n currentProjected = currentProjected/currentProjected.w;\\n vec4 nextProjected = projViewModel * vec4(aNext, 1.0);\\n vec2 currentScreen = currentProjected.xy * aspectVec;\\n vec2 nextScreen = (nextProjected.xy / nextProjected.w) * aspectVec;\\n float len = uLwd;\\n vec2 dir = vec2(1.0, 0.0);\\n vPoint = aPoint;\\n vLength = length(nextScreen - currentScreen)/2.0;\\n vLength = vLength/(vLength + len);\\n if (vLength > 0.0) {\\n dir = normalize(nextScreen - currentScreen);\\n }\\n vec2 normal = vec2(-dir.y, dir.x);\\n dir.x /= uAspect;\\n normal.x /= uAspect;\\n vec4 offset = vec4(len*(normal*aPoint.x*aPoint.y - dir), 0.0, 0.0);\\n gl_Position = currentProjected + offset;\\n#endif\\n \\n#ifdef IS_BRUSH\\n gl_Position = vec4(aPos, 1.);\\n#endif\\n}\",\"fragmentShader\":\"#line 2 2\\n// File 2 is the fragment shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\nvarying vec4 vCol; // carries alpha\\nvarying vec4 vPosition;\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nvarying vec2 vTexcoord;\\nuniform sampler2D uSampler;\\n#endif\\n\\n#ifdef HAS_FOG\\nuniform int uFogMode;\\nuniform vec3 uFogColor;\\nuniform vec4 uFogParms;\\n#endif\\n\\n#if defined(IS_LIT) && !defined(FIXED_QUADS)\\nvarying vec4 vNormal;\\n#endif\\n\\n#if NCLIPPLANES > 0\\nuniform vec4 vClipplane[NCLIPPLANES];\\n#endif\\n\\n#if NLIGHTS > 0\\nuniform mat4 mvMatrix;\\n#endif\\n\\n#ifdef IS_LIT\\nuniform vec3 emission;\\nuniform float shininess;\\n#if NLIGHTS > 0\\nuniform vec3 ambient[NLIGHTS];\\nuniform vec3 specular[NLIGHTS]; // light*material\\nuniform vec3 diffuse[NLIGHTS];\\nuniform vec3 lightDir[NLIGHTS];\\nuniform bool viewpoint[NLIGHTS];\\nuniform bool finite[NLIGHTS];\\n#endif\\n#endif // IS_LIT\\n\\n#ifdef IS_TWOSIDED\\nuniform bool front;\\nvarying float normz;\\n#endif\\n\\n#ifdef FAT_LINES\\nvarying vec2 vPoint;\\nvarying float vLength;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n vec4 fragColor;\\n#ifdef FAT_LINES\\n vec2 point = vPoint;\\n bool neg = point.y < 0.0;\\n point.y = neg ? (point.y + vLength)/(1.0 - vLength) :\\n -(point.y - vLength)/(1.0 - vLength);\\n#if defined(IS_TRANSPARENT) && defined(IS_LINESTRIP)\\n if (neg && length(point) <= 1.0) discard;\\n#endif\\n point.y = min(point.y, 0.0);\\n if (length(point) > 1.0) discard;\\n#endif // FAT_LINES\\n \\n#ifdef ROUND_POINTS\\n vec2 coord = gl_PointCoord - vec2(0.5);\\n if (length(coord) > 0.5) discard;\\n#endif\\n \\n#if NCLIPPLANES > 0\\n for (int i = 0; i < NCLIPPLANES; i++)\\n if (dot(vPosition, vClipplane[i]) < 0.0) discard;\\n#endif\\n \\n#ifdef FIXED_QUADS\\n vec3 n = vec3(0., 0., 1.);\\n#elif defined(IS_LIT)\\n vec3 n = normalize(vNormal.xyz);\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n if ((normz <= 0.) != front) discard;\\n#endif\\n\\n#ifdef IS_LIT\\n vec3 eye = normalize(-vPosition.xyz/vPosition.w);\\n vec3 lightdir;\\n vec4 colDiff;\\n vec3 halfVec;\\n vec4 lighteffect = vec4(emission, 0.);\\n vec3 col;\\n float nDotL;\\n#ifdef FIXED_QUADS\\n n = -faceforward(n, n, eye);\\n#endif\\n \\n#if NLIGHTS > 0\\n // Simulate two-sided lighting\\n if (n.z < 0.0)\\n n = -n;\\n for (int i=0;i 0) {\\n fogF = (uFogParms.y - vPosition.z/vPosition.w)/(uFogParms.y - uFogParms.x);\\n if (uFogMode > 1)\\n fogF = mix(uFogParms.w, 1.0, fogF);\\n fogF = fogF*uFogParms.z;\\n if (uFogMode == 2)\\n fogF = 1.0 - exp(-fogF);\\n // Docs are wrong: use (density*c)^2, not density*c^2\\n // https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/swrast/s_fog.c#L58\\n else if (uFogMode == 3)\\n fogF = 1.0 - exp(-fogF*fogF);\\n fogF = clamp(fogF, 0.0, 1.0);\\n gl_FragColor = vec4(mix(fragColor.rgb, uFogColor, fogF), fragColor.a);\\n } else gl_FragColor = fragColor;\\n#else\\n gl_FragColor = fragColor;\\n#endif // HAS_FOG\\n \\n}\",\"players\":[],\"webGLoptions\":{\"preserveDrawingBuffer\":true}},\"evals\":[],\"jsHooks\":[]} axes <- ellipse3d.axes(cov, centre=mu, level=0.68, color=\"gray\", lwd=2)"},{"path":"https://friendly.github.io/heplots/reference/Ellipsoid.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw an Ellipsoid in an rgl Scene — Ellipsoid","title":"Draw an Ellipsoid in an rgl Scene — Ellipsoid","text":"experimental function designed separate internal code link{heplot3d}.","code":""},{"path":"https://friendly.github.io/heplots/reference/Ellipsoid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw an Ellipsoid in an rgl Scene — Ellipsoid","text":"","code":"Ellipsoid(x, ...) # S3 method for data.frame Ellipsoid(x, which = 1:3, method = c(\"classical\", \"mve\", \"mcd\"), ...) # S3 method for default Ellipsoid( x, center = c(0, 0, 0), which = 1:3, radius = 1, df = Inf, label = \"\", cex.label = 1.5, col = \"pink\", lwd = 1, segments = 40, shade = TRUE, alpha = 0.1, wire = TRUE, verbose = FALSE, warn.rank = FALSE, ... )"},{"path":"https://friendly.github.io/heplots/reference/Ellipsoid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw an Ellipsoid in an rgl Scene — Ellipsoid","text":"x object. default method parameter x square positive definite matrix least 3x3 size. treated correlation covariance multivariate normal distribution. data.frame method, numeric data frame least 3 columns. ... arguments parameter selects variables object plotted. default first 3. method covariance method used: classical product-moment (\"classical\"), minimum volume ellipsoid (\"mve\"), minimum covariance determinant (\"mcd\" center center ellipsoid, vector length 3, typically mean vector data radius size ellipsoid df degrees freedom associated covariance matrix, used calculate appropriate F statistic label label ellipsoid cex.label text size label col color ellipsoid lwd line wire-frame version segments number segments composing ellipsoid; defaults 40. shade logical; ellipsoid smoothly shaded? alpha transparency shaded ellipsoid wire logical; ellipsoid drawn wire frame? verbose logical; debugging warn.rank logical; warn ellipsoid less rank 3?","code":""},{"path":"https://friendly.github.io/heplots/reference/Ellipsoid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw an Ellipsoid in an rgl Scene — Ellipsoid","text":"returns bounding box ellipsoid invisibly; otherwise used side effect drawing ellipsoid","code":""},{"path":"https://friendly.github.io/heplots/reference/Ellipsoid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw an Ellipsoid in an rgl Scene — Ellipsoid","text":"","code":"# none yet"},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":null,"dir":"Reference","previous_headings":"","what":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"Calculates partial eta-squared linear models multivariate analogs eta-squared (R^2), indicating partial association term multivariate linear model. different analog four standard multivariate test statistics: Pillai's trace, Hotelling-Lawley trace, Wilks' Lambda Roy's maximum root test.","code":""},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"","code":"etasq(x, ...) # S3 method for mlm etasq(x, ...) # S3 method for Anova.mlm etasq(x, anova = FALSE, ...) # S3 method for lm etasq(x, anova = FALSE, partial = TRUE, ...)"},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"x lm, mlm Anova.mlm object ... arguments passed Anova. anova logical, indicating whether result also contain test statistics produced Anova(). partial logical, indicating whether calculate partial classical eta^2.","code":""},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"anova=FALSE, one-column data frame containing eta-squared values term model. anova=TRUE, 5-column (lm) 7-column (mlm) data frame containing eta-squared values test statistics produced print.Anova() term model.","code":""},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"univariate linear models, classical \\(\\eta^2\\) = SSH / SST partial \\(\\eta^2\\) = SSH / (SSH + SSE). identical one-way designs. Partial eta-squared describes proportion total variation attributable given factor, partialing (excluding) factors total nonerror variation. commonly used measures effect size measures (non-linear) strength association ANOVA models. multivariate tests based \\(s=min(p, df_h)\\) latent roots \\(H E^{-1}\\). analogous multivariate partial \\(\\eta^2\\) measures calculated : Pillai's trace (V) \\(\\eta^2 = V/s\\) Hotelling-Lawley trace (T) \\(\\eta^2 = T/(T+s)\\) Wilks' Lambda (L) \\(\\eta^2 = L^{1/s}\\) Roy's maximum root (R) \\(\\eta^2 = R/(R+1)\\)","code":""},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"Muller, K. E. Peterson, B. L. (1984). Practical methods computing power testing Multivariate General Linear Hypothesis Computational Statistics Data Analysis, 2, 143-158. Muller, K. E. LaVange, L. M. Ramey, S. L. Ramey, C. T. (1992). Power Calculations General Linear Multivariate Models Including Repeated Measures Applications. Journal American Statistical Association, 87, 1209-1226.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"","code":"library(car) data(Soils, package=\"carData\") soils.mod <- lm(cbind(pH,N,Dens,P,Ca,Mg,K,Na,Conduc) ~ Block + Contour*Depth, data=Soils) #Anova(soils.mod) etasq(Anova(soils.mod)) #> eta^2 #> Block 0.5585973 #> Contour 0.6692989 #> Depth 0.5983772 #> Contour:Depth 0.2058495 etasq(soils.mod) # same #> eta^2 #> Block 0.5585973 #> Contour 0.6692989 #> Depth 0.5983772 #> Contour:Depth 0.2058495 etasq(Anova(soils.mod), anova=TRUE) #> #> Type II MANOVA Tests: Pillai test statistic #> eta^2 Df test stat approx F num Df den Df Pr(>F) #> Block 0.55860 3 1.6758 3.7965 27 81 1.777e-06 *** #> Contour 0.66930 2 1.3386 5.8468 18 52 2.730e-07 *** #> Depth 0.59838 3 1.7951 4.4697 27 81 8.777e-08 *** #> Contour:Depth 0.20585 6 1.2351 0.8640 54 180 0.7311 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 etasq(soils.mod, test=\"Wilks\") #> eta^2 #> Block 0.5701385 #> Contour 0.7434504 #> Depth 0.8294239 #> Contour:Depth 0.2250388 etasq(soils.mod, test=\"Hotelling\") #> eta^2 #> Block 0.5823516 #> Contour 0.8009753 #> Depth 0.9421533 #> Contour:Depth 0.2456774"},{"path":"https://friendly.github.io/heplots/reference/FootHead.html","id":null,"dir":"Reference","previous_headings":"","what":"Head measurements of football players — FootHead","title":"Head measurements of football players — FootHead","text":"Data collected part preliminary study examining relation football helmet design neck injuries. 30 subjects three groups: High school football players, college players non-football players.","code":""},{"path":"https://friendly.github.io/heplots/reference/FootHead.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Head measurements of football players — FootHead","text":"data frame 90 observations following 7 variables. group factor levels High school College Non-football width numeric vector: head width widest dimension circum numeric vector: head circumference front.back numeric vector: front back distance eye level eye.top numeric vector: eye top head ear.top numeric vector:ear top head jaw numeric vector: jaw width","code":""},{"path":"https://friendly.github.io/heplots/reference/FootHead.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Head measurements of football players — FootHead","text":"Rencher, . C. (1995), Methods Multivariate Analysis, New York: Wiley, Table 8.3.","code":""},{"path":"https://friendly.github.io/heplots/reference/FootHead.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Head measurements of football players — FootHead","text":"","code":"data(FootHead) str(FootHead) #> 'data.frame':\t90 obs. of 7 variables: #> $ group : Factor w/ 3 levels \"High school\",..: 1 1 1 1 1 1 1 1 1 1 ... #> $ width : num 13.5 15.5 14.5 15.5 14.5 14 15 15 15.5 15.5 ... #> $ circum : num 57.1 58.4 55.9 58.4 58.4 ... #> $ front.back: num 19.5 21 19 20 20 21 19.5 21 20.5 20.5 ... #> $ eye.top : num 12.5 12 10 13.5 13 12 13.5 13 13.5 13 ... #> $ ear.top : num 14 16 13 15 15.5 14 15.5 14 14.5 15 ... #> $ jaw : num 11 12 12 12 12 13 13 13 12.5 13 ... require(car) # use Helmert contrasts for group contrasts(FootHead$group) <- contr.helmert contrasts(FootHead$group) #> [,1] [,2] #> High school -1 -1 #> College 1 -1 #> Non-football 0 2 foot.mod <- lm(cbind(width, circum,front.back,eye.top,ear.top,jaw) ~ group, data=FootHead) Manova(foot.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> group 2 0.76116 8.4994 12 166 1.876e-12 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # show the HE plot for the first two variables heplot(foot.mod, main=\"HE plot for width and circumference\", fill=TRUE, col=c(\"red\", \"blue\")) # show it with tests of Helmert contrasts heplot(foot.mod, hypotheses=list(\"group.1\"=\"group1\",\"group.2\"=\"group2\"), col=c(\"red\", \"blue\", \"green3\", \"green3\" ), main=\"HE plot with orthogonal Helmert contrasts\") # show all pairwise HE plots pairs(foot.mod) # ... with tests of Helmert contrasts pairs(foot.mod, hypotheses=list(\"group.1\"=\"group1\",\"group.2\"=\"group2\"), col=c(\"red\", \"blue\", \"green3\", \"green3\"), hyp.labels=FALSE) # see that the hypothesis for groups really is 2D if(requireNamespace(\"rgl\")){ heplot3d(foot.mod, variables=c(1,2,6), hypotheses=list(\"group.1\"=\"group1\",\"group.2\"=\"group2\"), col=c(\"red\", \"blue\", \"green3\", \"green3\" ), wire=FALSE) }"},{"path":"https://friendly.github.io/heplots/reference/glance.mlm.html","id":null,"dir":"Reference","previous_headings":"","what":"Glance at an mlm object — glance.mlm","title":"Glance at an mlm object — glance.mlm","text":"function takes \"mlm\" object, fit lm multivariate response. goal return something analogous glance.lm univariate response linear model.","code":""},{"path":"https://friendly.github.io/heplots/reference/glance.mlm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Glance at an mlm object — glance.mlm","text":"","code":"# S3 method for mlm glance(x, ...)"},{"path":"https://friendly.github.io/heplots/reference/glance.mlm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Glance at an mlm object — glance.mlm","text":"x mlm object created lm, .e., multivariate response. ... Additional arguments. used.","code":""},{"path":"https://friendly.github.io/heplots/reference/glance.mlm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Glance at an mlm object — glance.mlm","text":"tibble one row response variable columns: r.squared R squared statistic, percent variation explained model. adj.r.squared Adjusted R squared statistic, like R squared statistic except taking degrees freedom account. sigma Estimated standard error residuals fstatitic Overall F statistic model numdf Numerator degrees freedom overall test dendf Denominator degrees freedom overall test p.value P-value corresponding F statistic nobs Number observations used","code":""},{"path":"https://friendly.github.io/heplots/reference/glance.mlm.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Glance at an mlm object — glance.mlm","text":"multivariate case, returns tibble one row response variable, containing goodness fit measures, F-tests p-values.","code":""},{"path":"https://friendly.github.io/heplots/reference/glance.mlm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Glance at an mlm object — glance.mlm","text":"","code":"iris.mod <- lm(cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) ~ Species, data=iris) glance(iris.mod) #> # A tibble: 4 × 9 #> response r.squared adj.r.squared sigma fstatistic numdf dendf p.value nobs #> #> 1 Sepal.Len… 0.619 0.614 0.515 119. 2 147 1.67e-31 150 #> 2 Sepal.Wid… 0.401 0.393 0.340 49.2 2 147 4.49e-17 150 #> 3 Petal.Len… 0.941 0.941 0.430 1180. 2 147 2.86e-91 150 #> 4 Petal.Wid… 0.929 0.928 0.205 960. 2 147 4.17e-85 150"},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":null,"dir":"Reference","previous_headings":"","what":"Orthogonalize successive columns of a data frame or matrix — gsorth","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"gsorth uses sequential, orthogonal projections, Gram-Schmidt method, transform matrix numeric columns data frame uncorrelated set, possibly retaining column means standard deviations original.","code":""},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"","code":"gsorth(y, order, recenter = TRUE, rescale = TRUE, adjnames = TRUE)"},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"y numeric data frame matrix order integer vector specifying order /subset columns y orthogonalized. missing, order=1:p p=ncol(y). recenter TRUE, result column means original; else means = 0 cols 2:p. rescale TRUE, result column standard deviations original; else sd = residual variance cols 2:p adjnames TRUE, column names result adjusted form Y1, Y2.1, Y3.12, adding suffixes '.1', '.12', etc. original column names.","code":""},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"Returns matrix data frame uncorrelated columns. Row column names copied result.","code":""},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"statistical applications, interpretation depends order variables orthogonalized. multivariate linear models, orthogonalizing response, Y variables provides equivalent step-tests, Y1 tested alone, Y2.1, Y3.12, etc. can tested determine additional contributions previous response variables. Similarly, orthogonalizing model X variables provides equivalent Type tests, provided anova. method equivalent setting columns 2:p residuals linear regression column prior columns, .e., z[,j] <- resid( lm( z[,j] ~ .matrix(z[,1:(j-1)]), data=z) ) However, accuracy speed transformation carried using QR decomposition.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"","code":"GSiris <- gsorth(iris[,1:4]) GSiris <- gsorth(iris, order=1:4) # same, using order str(GSiris) #> num [1:150, 1:4] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... #> - attr(*, \"dimnames\")=List of 2 #> ..$ : chr [1:150] \"1\" \"2\" \"3\" \"4\" ... #> ..$ : chr [1:4] \"Sepal.Length\" \"Sepal.Width.1\" \"Petal.Length.12\" \"Petal.Width.123\" zapsmall(cor(GSiris)) #> Sepal.Length Sepal.Width.1 Petal.Length.12 Petal.Width.123 #> Sepal.Length 1 0 0 0 #> Sepal.Width.1 0 1 0 0 #> Petal.Length.12 0 0 1 0 #> Petal.Width.123 0 0 0 1 colMeans(GSiris) #> Sepal.Length Sepal.Width.1 Petal.Length.12 Petal.Width.123 #> 5.843333 3.057333 3.758000 1.199333 # sd(GSiris) -- sd() now deprecated apply(GSiris, 2, sd) #> Sepal.Length Sepal.Width.1 Petal.Length.12 Petal.Width.123 #> 0.8280661 0.4358663 1.7652982 0.7622377 # orthogonalize Y side GSiris <- data.frame(gsorth(iris[,1:4]), Species=iris$Species) iris.mod1 <- lm(as.matrix(GSiris[,1:4]) ~ Species, data=GSiris) car::Anova(iris.mod1) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Species 2 1.1919 53.466 8 290 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # orthogonalize X side rohwer.mod <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, data=Rohwer) car::Anova(rohwer.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> n 1 0.059964 1.2970 3 61 0.283582 #> s 1 0.097788 2.2039 3 61 0.096703 . #> ns 1 0.208820 5.3667 3 61 0.002406 ** #> na 1 0.183478 4.5690 3 61 0.005952 ** #> ss 1 0.091796 2.0552 3 61 0.115521 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # type I tests for Rohwer data Rohwer.orth <- cbind(Rohwer[,1:5], gsorth(Rohwer[, c(\"n\", \"s\", \"ns\", \"na\", \"ss\")], adjnames=FALSE)) rohwer.mod1 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, data=Rohwer.orth) car::Anova(rohwer.mod1) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> n 1 0.227735 5.9962 3 61 0.001195 ** #> s 1 0.088967 1.9857 3 61 0.125530 #> ns 1 0.112979 2.5898 3 61 0.060939 . #> na 1 0.302957 8.8375 3 61 5.958e-05 *** #> ss 1 0.091796 2.0552 3 61 0.115521 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # compare with anova() anova(rohwer.mod1) #> Analysis of Variance Table #> #> Df Pillai approx F num Df den Df Pr(>F) #> (Intercept) 1 0.97665 850.63 3 61 < 2.2e-16 *** #> n 1 0.22774 6.00 3 61 0.001195 ** #> s 1 0.08897 1.99 3 61 0.125530 #> ns 1 0.11298 2.59 3 61 0.060939 . #> na 1 0.30296 8.84 3 61 5.958e-05 *** #> ss 1 0.09180 2.06 3 61 0.115521 #> Residuals 63 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # compare heplots for original Xs and orthogonalized, Type I heplot(rohwer.mod) heplot(rohwer.mod1)"},{"path":"https://friendly.github.io/heplots/reference/Headache.html","id":null,"dir":"Reference","previous_headings":"","what":"Treatment of Headache Sufferers for Sensitivity to Noise — Headache","title":"Treatment of Headache Sufferers for Sensitivity to Noise — Headache","text":"study conducted investigating effectiveness different kinds psychological treatment sensitivity headache sufferers noise, described Hand Taylor (1987), Study E.","code":""},{"path":"https://friendly.github.io/heplots/reference/Headache.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Treatment of Headache Sufferers for Sensitivity to Noise — Headache","text":"data frame 98 observations following 6 variables. type Type headache, factor levels Migrane Tension treatment Treatment group, factor levels T1 T2 T3 Control. See Details u1 Noise level rated Uncomfortable, initial measure du1 Noise level rated Definitely Uncomfortable, initial measure u2 Noise level rated Uncomfortable, final measure du2 Noise level rated Definitely Uncomfortable, final measure","code":""},{"path":"https://friendly.github.io/heplots/reference/Headache.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Treatment of Headache Sufferers for Sensitivity to Noise — Headache","text":"D. J. Hand C. C. Taylor (1987). Multivariate analysis variance repeated measures: practical approach behavioural scientists London: Chapman Hall. ISBN: 0412258005. Table E.1.","code":""},{"path":"https://friendly.github.io/heplots/reference/Headache.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Treatment of Headache Sufferers for Sensitivity to Noise — Headache","text":"pre-post design, 98 patients first assessed volume noise found uncomfortable (U) definitely uncomfortable (DU). given relaxation training, listened noise DU level given instruction breathing techniques use visual imagery distract discomfort. One four treatments applied, patients reassessed noise volume considered uncomfortable (U) definitely uncomfortable (DU). treatments described follows: T1 Listened tone initial DU level, amount time able tolerate . T2 T1, one additional minute exposure T3 T2, explicitly instructed use relaxation techniques Control subject experienced exposure noise tone final sensitivity measures taken Hand Taylor described several substantive hypotheses related differences among treatments. Headache data frame, included contrasts(Headache$treatment)","code":""},{"path":"https://friendly.github.io/heplots/reference/Headache.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Treatment of Headache Sufferers for Sensitivity to Noise — Headache","text":"","code":"library(car) data(Headache) str(Headache) #> 'data.frame':\t98 obs. of 6 variables: #> $ type : Factor w/ 2 levels \"Migrane\",\"Tension\": 1 1 2 1 1 1 1 1 1 2 ... #> $ treatment: Factor w/ 4 levels \"T1\",\"T2\",\"T3\",..: 3 1 1 3 3 3 2 1 1 3 ... #> ..- attr(*, \"contrasts\")= num [1:4, 1:3] 1 -1 0 0 1 1 0 -2 0 0 ... #> .. ..- attr(*, \"dimnames\")=List of 2 #> .. .. ..$ : chr [1:4] \"T1\" \"T2\" \"T3\" \"Control\" #> .. .. ..$ : NULL #> $ u1 : num 2.34 2.73 0.37 7.5 4.63 3.6 2.45 2.31 1.38 0.85 ... #> $ du1 : num 5.3 6.85 0.53 9.12 7.21 7.3 3.75 3.25 2.33 1.42 ... #> $ u2 : num 5.8 4.68 0.55 5.7 5.63 4.83 2.5 2 2.23 1.37 ... #> $ du2 : num 8.52 6.68 0.84 7.88 6.75 7.32 3.18 3.3 3.98 1.89 ... # basic MLM, specifying between-S effects headache.mod <- lm(cbind(u1, du1, u2, du2) ~ type * treatment, data=Headache) ############################## ## between-S tests ############################## Anova(headache.mod, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> type 1 0.042678 0.9283 4 87 0.451426 #> treatment 3 0.136154 3.0294 4 89 0.021609 * #> type:treatment 3 0.161202 3.5867 4 89 0.009281 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test each contrast separately print(linearHypothesis(headache.mod, hypothesis=\"treatment1\", test=\"Roy\"), SSP=FALSE) #> #> Multivariate Test: #> Df test stat approx F num Df den Df Pr(>F) #> Roy 1 0.01305284 0.2838993 4 87 0.88769 print(linearHypothesis(headache.mod, hypothesis=\"treatment2\", test=\"Roy\"), SSP=FALSE) #> #> Multivariate Test: #> Df test stat approx F num Df den Df Pr(>F) #> Roy 1 0.08267735 1.798232 4 87 0.13645 print(linearHypothesis(headache.mod, hypothesis=\"treatment3\", test=\"Roy\"), SSP=FALSE) #> #> Multivariate Test: #> Df test stat approx F num Df den Df Pr(>F) #> Roy 1 0.1902026 4.136907 4 87 0.0040827 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(headache.mod, variables=c(1,3), hypotheses=paste(\"treatment\", 1:3, sep=\"\"), hyp.labels=c(\"extra.exp\", \"no.inst\", \"explicit.inst\"), xlab=\"u1: Initial sensitivity\", ylab=\"u2: Final sensitivity\", main=\"Headache data: Unpleasant levels\") abline(0, 1, lty=5, col=\"gray\") heplot(headache.mod, variables=c(2,4), hypotheses=paste(\"treatment\", 1:3, sep=\"\"), xlab=\"du1: Initial sensitivity\", ylab=\"du2: Final sensitivity\", main=\"Headache data: Definitely Unpleasant levels\") abline(0, 1, lty=5, col=\"gray\") pairs(headache.mod) ############################## # between-S and within-S tests ############################## idata = expand.grid(level=factor(c(\"U\", \"DU\")), phase=factor(1:2)) Anova(headache.mod, idata=idata, idesign=~level*phase) #> #> Type II Repeated Measures MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 0.64648 164.580 1 90 < 2e-16 *** #> type 1 0.00691 0.627 1 90 0.43072 #> treatment 3 0.04122 1.290 3 90 0.28275 #> type:treatment 3 0.00118 0.035 3 90 0.99106 #> level 1 0.60226 136.276 1 90 < 2e-16 *** #> type:level 1 0.00000 0.000 1 90 0.99653 #> treatment:level 3 0.00660 0.199 3 90 0.89661 #> type:treatment:level 3 0.05360 1.699 3 90 0.17287 #> phase 1 0.02459 2.269 1 90 0.13546 #> type:phase 1 0.02267 2.088 1 90 0.15193 #> treatment:phase 3 0.08074 2.635 3 90 0.05459 . #> type:treatment:phase 3 0.06236 1.995 3 90 0.12033 #> level:phase 1 0.03465 3.231 1 90 0.07563 . #> type:level:phase 1 0.00820 0.744 1 90 0.39070 #> treatment:level:phase 3 0.02164 0.663 3 90 0.57669 #> type:treatment:level:phase 3 0.03475 1.080 3 90 0.36173 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"},{"path":"https://friendly.github.io/heplots/reference/heplot-package.html","id":null,"dir":"Reference","previous_headings":"","what":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"heplots package provides functions visualizing hypothesis tests multivariate linear models (MANOVA, multivariate multiple regression, MANCOVA, repeated measures designs). plots represent sums--squares--products matrices linear hypotheses error using ellipses (two dimensions), ellipsoids (three dimensions), line segments one dimension. See Fox, Friendly Monette (2007) brief introduction Friendly, Monette Fox (2013) general discussion role elliptical geometry statistical understanding. topics now addressed include robust MLMs, tests equality covariance matrices MLMs, chi square Q-Q plots MLMs. package also provides collection data sets illustrating variety multivariate linear models types listed , together graphical displays. Several tutorial vignettes also included. See vignette(package=\"heplots\").","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"graphical functions contained display multivariate model effects variable (data) space, one response variables (contrasts among response variables repeated measures designs). heplot constructs two-dimensional plots model terms linear hypotheses pairs response variables multivariate linear models. heplot3d constructs analogous 3D plots triples response variables. pairs.mlm constructs ``matrix'' pairwise plots. heplot1d constructs 1-dimensional analogs plots model terms linear hypotheses single response variables. repeated measure designs, -subject effects within-subject effects must plotted separately, error terms (E matrices) differ. terms involving within-subject effects, functions carry linear transformation matrix Y responses matrix Y M, M model matrix term intra-subject design produce plots H E matrices transformed space. vignette repeated describes graphical methods repeated measures designs. related car package calculates Type II Type III tests multivariate linear hypotheses using Anova linearHypothesis functions. candisc-package package provides functions visualizing effects MLM model terms low-dimensional canonical space shows largest hypothesis relative error variation. candisc package now also includes related methods canonical correlation analysis. heplots package also contains large number multivariate data sets examples analyses graphic displays. Use data(package=\"heplots\") see current list.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"John Fox, Michael Friendly, Georges Monette Maintainer: Michael Friendly, friendly@yorku.ca, http://datavis.ca","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot-package.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples. Journal Statistical Software, 17(6), 1-42. doi:10.18637/jss.v017.i06 Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421-444. http://datavis.ca/papers/jcgs-heplots.pdf Fox, J., Friendly, M. & Monette, G. (2007). Visual hypothesis tests multivariate linear models: heplots package R. DSC 2007: Directions Statistical Computing. https://socialsciences.mcmaster.ca/jfox/heplots-dsc-paper.pdf Friendly, M. (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 Fox, J., Friendly, M. & Weisberg, S. (2013). \tHypothesis Tests Multivariate Linear Models Using car Package. \tR Journal, 5(1), \thttps://journal.r-project.org/archive/2013-1/fox-friendly-weisberg.pdf. Friendly, M., Monette, G. & Fox, J. (2013). \tElliptical Insights: Understanding Statistical Methods Elliptical Geometry. \tStatistical Science, 2013, 28 (1), 1-39, \thttp://datavis.ca/papers/ellipses.pdf. Friendly, M. & Sigal, M. (2014). Recent Advances Visualizing Multivariate Linear Models. Revista Colombiana de Estadistica, 37, 261-283 Friendly, M. & Sigal, M. (2016). Graphical Methods Multivariate Linear Models Psychological Research: R Tutorial. Submitted publication.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Two-Dimensional HE Plots — heplot","title":"Two-Dimensional HE Plots — heplot","text":"function plots ellipses representing hypothesis error sums--squares--products matrices terms linear hypotheses multivariate linear model. include MANOVA models (explanatory variables factors), multivariate regression (quantitative predictors), MANCOVA models, homogeneity regression, well repeated measures designs treated multivariate perspective.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Two-Dimensional HE Plots — heplot","text":"","code":"heplot(mod, ...) # S3 method for mlm heplot( mod, terms, hypotheses, term.labels = TRUE, hyp.labels = TRUE, err.label = \"Error\", label.pos = NULL, variables = 1:2, error.ellipse = !add, factor.means = !add, grand.mean = !add, remove.intercept = TRUE, type = c(\"II\", \"III\", \"2\", \"3\"), idata = NULL, idesign = NULL, icontrasts = c(\"contr.sum\", \"contr.poly\"), imatrix = NULL, iterm = NULL, markH0 = !is.null(iterm), manova, size = c(\"evidence\", \"effect.size\"), level = 0.68, alpha = 0.05, segments = 60, center.pch = \"+\", center.cex = 2, col = getOption(\"heplot.colors\", c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\")), lty = 2:1, lwd = 1:2, fill = FALSE, fill.alpha = 0.3, xlab, ylab, main = \"\", xlim, ylim, axes = TRUE, offset.axes, add = FALSE, verbose = FALSE, warn.rank = FALSE, ... )"},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Two-Dimensional HE Plots — heplot","text":"mod model object class \"mlm\". ... arguments pass plot, text, points. terms logical value character vector terms model plot hypothesis matrices; missing TRUE, defaults terms; FALSE, terms plotted. hypotheses optional list linear hypotheses plot hypothesis matrices; hypotheses specified linearHypothesis function car package; list elements can named, case names used. term.labels logical value character vector names terms plotted. TRUE (default) names terms used; FALSE, term labels plotted. hyp.labels logical value character vector names hypotheses plotted. TRUE (default) names components list hypotheses used; FALSE, hypothesis labels plotted. err.label Label error ellipse label.pos Label position, vector integers (0:4) character strings (c(\"center\", \"bottom\", \"left\", \"top\", \"right\"), c(\"C\", \"S\", \"W\", \"N\", \"E\") use labeling ellipses, recycled necessary. Values 1, 2, 3 4, respectively indicate positions , left , right max/min coordinates ellipse; value 0 specifies centroid ellipse object. default, label.pos=NULL uses correlation ellipse determine \"top\" (r>=0) \"bottom\" (r<0). Even flexible options described label.ellipse variables indices names two response variables plotted; defaults 1:2. error.ellipse TRUE, plot error ellipse; defaults TRUE, argument add FALSE (see ). factor.means logical value character vector names factors means plotted, TRUE FALSE; defaults TRUE, argument add FALSE (see ). grand.mean TRUE, plot centroid data; defaults TRUE, argument add FALSE (see ). remove.intercept TRUE (default), plot ellipse intercept even MANOVA table. type ``type'' sum--squares--products matrices compute; one \"II\", \"III\", \"2\", \"3\", \"II\" default (\"2\" synonym). idata optional data frame giving factor factors defining intra-subject model multivariate repeated-measures data. See Friendly (2010) Details Anova explanation intra-subject design explanation arguments relating intra-subject factors. idesign one-sided model formula using ``data'' idata specifying intra-subject design repeated measure models. icontrasts names contrast-generating functions applied default factors ordered factors, respectively, within-subject ``data''; contrasts must produce intra-subject model matrix different terms orthogonal. default c(\"contr.sum\", \"contr.poly\"). imatrix lieu idata idesign, can specify intra-subject design matrix directly via imatrix, form list named elements. element gives columns within-subject model matrix intra-subject term tested, must many rows responses; columns within-subject model matrix different terms must mutually orthogonal. iterm repeated measures designs, must specify one intra-subject term (character string) select SSPE (E) matrix used plot. Hypothesis terms plotted include iterm effect well interactions iterm terms. markH0 logical value (else list arguments mark.H0) used draw cross-hairs point indicating value point null hypothesis. default TRUE iterm non-NULL. manova optional Anova.mlm object model; absent MANOVA computed. Specifying argument can therefore save computation repeated calls. size scale hypothesis ellipse relative error ellipse; \"evidence\", default, scaling done ``significant'' hypothesis ellipse level alpha extends outside error ellipse; \"effect.size\", hypothesis ellipse scale error ellipse. level equivalent coverage ellipse normally-distributed errors, defaults 0.68, giving standard 1 SD bivariate ellipse. alpha significance level Roy's greatest-root test statistic; size=\"evidence\", hypothesis ellipse scaled just touches error ellipse specified alpha level; larger hypothesis ellipse somewhere space response variables therefore indicates statistical significance; defaults 0.05. segments number line segments composing ellipse; defaults 60. center.pch character use plotting centroid data; defaults \"+\". center.cex size character use plotting centroid data; defaults 2. col color vector colors use plotting ellipses; first color used error ellipse; remaining colors --- recycled necessary --- used hypothesis ellipses. single color can given, case used ellipses. convenience, default colors heplots produced given session can changed assigning color vector via options(heplot.colors =c(...). Otherwise, default colors c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\"). lty vector line types use plotting ellipses; first used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single line type can given. Defaults 2:1. lwd vector line widths use plotting ellipses; first used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single line width can given. Defaults 1:2. fill logical vector indicating whether ellipse filled . first value used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single fill value can given. Defaults FALSE backward compatibility. See Details . fill.alpha Alpha transparency filled ellipses, numeric scalar vector values within [0,1], 0 means fully transparent 1 means fully opaque. xlab x-axis label; defaults name x variable. ylab y-axis label; defaults name y variable. main main plot label; defaults \"\". xlim x-axis limits; absent, computed data. ylim y-axis limits; absent, computed data. axes Whether draw x, y axes; defaults TRUE offset.axes proportion extend axes direction computed data; optional. add TRUE, add current plot; default FALSE. TRUE, error ellipse plotted. verbose TRUE, print MANOVA table details hypothesis tests; default FALSE. warn.rank TRUE, suppress warnings rank hypothesis matrix ellipse collapses line; default FALSE.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Two-Dimensional HE Plots — heplot","text":"function invisibly returns object class \"heplot\", coordinates various hypothesis ellipses error ellipse, limits horizontal vertical axes. may useful adding additional annotations plot, using standard plotting functions. (methods manipulating objects currently available.) components : H list containing coordinates ellipse hypothesis terms E matrix containing coordinates error ellipse center x,y coordinates centroid xlim x-axis limits ylim y-axis limits radius radius unit circles used generate ellipses","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Two-Dimensional HE Plots — heplot","text":"heplot function plots representation covariance ellipses hypothesized model terms linear hypotheses (H) corresponding error (E) matrices two response variables multivariate linear model (mlm). plot helps visualize nature dimensionality response variation two variables jointly relation error variation summarized various multivariate test statistics (Wilks' Lambda, Pillai trace, Hotelling-Lawley trace, Roy maximum root). Roy's maximum root test particularly simple visual interpretation, exploited size=\"evidence\" version plot. See description argument alpha. 1 df hypothesis term (quantitative regressor, single contrast parameter test), H matrix rank 1 (one non-zero latent root \\(H E^{-1}\\)) H \"ellipse\" collapses degenerate line. Typically, fit mlm mymlm <- lm(cbind(y1, y2, y3, ...) ~ modelterms), plot modelterms heplot(mymlm, ...). Arbitrary linear hypotheses related terms model (e.g., contrasts effect) can included plot using hypotheses argument. See linearHypothesis details. repeated measure designs, response variables correspond one variates observed within-subject design, -subject effects within-subject effects must plotted separately, error terms (E matrices) differ. specify intra-subject term (iterm), analysis plots amount analysis matrix Y responses post-multiplied matrix M determined intra-subject design term. See Friendly (2010) vignette(\"repeated\") package extended discussion examples. related candisc package provides functions visualizing multivariate linear model low-dimensional view via generalized canonical discriminant analyses. heplot.candisc heplot3d.candisc provide low-rank 2D (3D) view effects given term space maximum discrimination. element fill TRUE, ellipse outline drawn using corresponding color col, interior filled transparent version color specified fill.alpha. produce filled (non-degenerate) ellipses without bounding outline, use value lty=0 corresponding position.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Two-Dimensional HE Plots — heplot","text":"Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples Journal Statistical Software, 17(6), 1--42. https://www.jstatsoft.org/v17/i06/, DOI: 10.18637/jss.v017.i06 Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421--444. http://datavis.ca/papers/jcgs-heplots.pdf Friendly, Michael (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. DOI: 10.18637/jss.v037.i04. Fox, J., Friendly, M. & Weisberg, S. (2013). Hypothesis Tests Multivariate Linear Models Using car Package. R Journal, 5(1), https://journal.r-project.org/archive/2013-1/fox-friendly-weisberg.pdf. Friendly, M. & Sigal, M. (2014) Recent Advances Visualizing Multivariate Linear Models. Revista Colombiana de Estadistica, 37, 261-283.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Two-Dimensional HE Plots — heplot","text":"","code":"## iris data contrasts(iris$Species) <- matrix(c(0,-1,1, 2, -1, -1), 3,2) contrasts(iris$Species) #> [,1] [,2] #> setosa 0 2 #> versicolor -1 -1 #> virginica 1 -1 iris.mod <- lm(cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) ~ Species, data=iris) hyp <- list(\"V:V\"=\"Species1\",\"S:VV\"=\"Species2\") heplot(iris.mod, hypotheses=hyp) # compare with effect-size scaling heplot(iris.mod, hypotheses=hyp, size=\"effect\", add=TRUE) # try filled ellipses; include contrasts heplot(iris.mod, hypotheses=hyp, fill=TRUE, fill.alpha=0.2, col=c(\"red\", \"blue\")) heplot(iris.mod, hypotheses=hyp, fill=TRUE, col=c(\"red\", \"blue\"), lty=c(0,0,1,1)) # vary label position and fill.alpha heplot(iris.mod, hypotheses=hyp, fill=TRUE, fill.alpha=c(0.3,0.1), col=c(\"red\", \"blue\"), lty=c(0,0,1,1), label.pos=0:3) # what is returned? hep <-heplot(iris.mod, variables=c(1,3), hypotheses=hyp) str(hep) #> List of 6 #> $ H :List of 3 #> ..$ Species: num [1:61, 1:2] 9.66 9.68 9.66 9.6 9.5 ... #> .. ..- attr(*, \"dimnames\")=List of 2 #> .. .. ..$ : NULL #> .. .. ..$ : chr [1:2] \"Sepal.Length\" \"Petal.Length\" #> ..$ V:V : num [1:61, 1:2] 7.41 7.4 7.38 7.33 7.27 ... #> .. ..- attr(*, \"dimnames\")=List of 2 #> .. .. ..$ : NULL #> .. .. ..$ : chr [1:2] \"Sepal.Length\" \"Petal.Length\" #> ..$ S:VV : num [1:61, 1:2] 9.33 9.31 9.25 9.16 9.03 ... #> .. ..- attr(*, \"dimnames\")=List of 2 #> .. .. ..$ : NULL #> .. .. ..$ : chr [1:2] \"Sepal.Length\" \"Petal.Length\" #> $ E : num [1:61, 1:2] 6.62 6.62 6.61 6.59 6.56 ... #> ..- attr(*, \"dimnames\")=List of 2 #> .. ..$ : NULL #> .. ..$ : chr [1:2] \"Sepal.Length\" \"Petal.Length\" #> $ center: Named num [1:2] 5.84 3.76 #> ..- attr(*, \"names\")= chr [1:2] \"Sepal.Length\" \"Petal.Length\" #> $ xlim : Named num [1:2] 2.01 9.68 #> ..- attr(*, \"names\")= chr [1:2] \"Sepal.Length\" \"Sepal.Length\" #> $ ylim : Named num [1:2] -6.33 13.84 #> ..- attr(*, \"names\")= chr [1:2] \"Petal.Length\" \"Petal.Length\" #> $ radius: num 1.52 #> - attr(*, \"class\")= chr \"heplot\" # all pairs pairs(iris.mod, hypotheses=hyp, hyp.labels=FALSE) ## Pottery data, from car package data(Pottery, package = \"carData\") pottery.mod <- lm(cbind(Al, Fe, Mg, Ca, Na) ~ Site, data=Pottery) heplot(pottery.mod) heplot(pottery.mod, terms=FALSE, add=TRUE, col=\"blue\", hypotheses=list(c(\"SiteCaldicot = 0\", \"SiteIsleThorns=0\")), hyp.labels=\"Sites Caldicot and Isle Thorns\") ## Rohwer data, multivariate multiple regression/ANCOVA #-- ANCOVA, assuming equal slopes rohwer.mod <- lm(cbind(SAT, PPVT, Raven) ~ SES + n + s + ns + na + ss, data=Rohwer) car::Anova(rohwer.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> SES 1 0.37853 12.1818 3 60 2.507e-06 *** #> n 1 0.04030 0.8400 3 60 0.477330 #> s 1 0.09271 2.0437 3 60 0.117307 #> ns 1 0.19283 4.7779 3 60 0.004729 ** #> na 1 0.23134 6.0194 3 60 0.001181 ** #> ss 1 0.04990 1.0504 3 60 0.376988 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 col <- c(\"red\", \"black\", \"blue\", \"cyan\", \"magenta\", \"brown\", \"gray\") heplot(rohwer.mod, col=col) # Add ellipse to test all 5 regressors heplot(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\")), col=col, fill=TRUE) # View all pairs pairs(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\"))) # or 3D plot if(requireNamespace(\"rgl\")){ col <- c(\"pink\", \"black\", \"blue\", \"cyan\", \"magenta\", \"brown\", \"gray\") heplot3d(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\")), col=col) }"},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":null,"dir":"Reference","previous_headings":"","what":"One-Dimensional HE Plots — heplot1d","title":"One-Dimensional HE Plots — heplot1d","text":"function plots 1-dimensional representation hypothesis (H) error (E) sums--squares--products matrices terms linear hypotheses multivariate linear model.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"One-Dimensional HE Plots — heplot1d","text":"","code":"heplot1d(mod, ...) # S3 method for mlm heplot1d( mod, terms, hypotheses, term.labels = TRUE, hyp.labels = TRUE, variables = 1, error.ellipse = !add, factor.means = !add, grand.mean = !add, remove.intercept = TRUE, type = c(\"II\", \"III\", \"2\", \"3\"), idata = NULL, idesign = NULL, icontrasts = c(\"contr.sum\", \"contr.poly\"), imatrix = NULL, iterm = NULL, manova, size = c(\"evidence\", \"effect.size\"), level = 0.68, alpha = 0.05, center.pch = \"|\", col = getOption(\"heplot.colors\", c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\")), lty = 2:1, lwd = 1:2, xlab, main = \"\", xlim, axes = TRUE, offset.axes = 0.1, add = FALSE, verbose = FALSE, ... )"},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"One-Dimensional HE Plots — heplot1d","text":"mod model object class \"mlm\". ... arguments pass plot, text, points. terms logical value character vector terms model plot hypothesis matrices; missing TRUE, defaults terms; FALSE, terms plotted. hypotheses optional list linear hypotheses plot hypothesis matrices; hypotheses specified linearHypothesis function car package; list elements can named, case names used. term.labels logical value character vector names terms plotted. TRUE (default) names terms used; FALSE, term labels plotted. hyp.labels logical value character vector names hypotheses plotted. TRUE (default) names components list hypotheses used; FALSE, hypothesis labels plotted. variables indices names two response variables plotted; defaults 1:2. error.ellipse TRUE, plot error ellipse; defaults TRUE, argument add FALSE (see ). factor.means logical value character vector names factors means plotted, TRUE FALSE; defaults TRUE, argument add FALSE (see ). grand.mean TRUE, plot centroid data; defaults TRUE, argument add FALSE (see ). remove.intercept TRUE (default), plot ellipse intercept even MANOVA table. type ``type'' sum--squares--products matrices compute; one \"II\", \"III\", \"2\", \"3\", \"II\" default (\"2\" synonym). idata optional data frame giving factor factors defining intra-subject model multivariate repeated-measures data. See Details Anova explanation intra-subject design explanation arguments relating intra-subject factors. idesign one-sided model formula using ``data'' idata specifying intra-subject design repeated measure models. icontrasts names contrast-generating functions applied default factors ordered factors, respectively, within-subject ``data''; contrasts must produce intra-subject model matrix different terms orthogonal. default c(\"contr.sum\", \"contr.poly\"). imatrix lieu idata idesign, can specify intra-subject design matrix directly via imatrix, form list named elements. element gives columns within-subject model matrix intra-subject term tested, must many rows responses; columns within-subject model matrix different terms must mutually orthogonal. iterm repeated measures designs, must specify one intra-subject term (character string) select SSPE (E) matrix used plot. Hypothesis terms plotted include iterm effect well interactions iterm terms. manova optional Anova.mlm object model; absent MANOVA computed. Specifying argument can therefore save computation repeated calls. size scale hypothesis ellipse relative error ellipse; \"evidence\", default, scaling done ``significant'' hypothesis ellipse extends outside error ellipse; \"effect.size\", hypothesis ellipse scale error ellipse. level equivalent coverage ellipse normally-distributed errors, defaults 0.68. alpha significance level Roy's greatest-root test statistic; size=\"evidence\", hypothesis ellipse scaled just touches error ellipse specified alpha level; larger hypothesis ellipse therefore indicates statistical significance; defaults 0.05. center.pch character use plotting centroid data; defaults \"|\". col color vector colors use plotting ellipses; first color used error ellipse; remaining colors --- recycled necessary --- used hypothesis ellipses. single color can given, case used ellipses. convenience, default colors heplots produced given session can changed assigning color vector via options(heplot.colors =c(...). Otherwise, default colors c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\"). lty vector line types use plotting ellipses; first used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single line type can given. Defaults 2:1. lwd vector line widths use plotting ellipses; first used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single line width can given. Defaults 1:2. xlab x-axis label; defaults name x variable. main main plot label; defaults \"\". xlim x-axis limits; absent, computed data. axes Whether draw x, y axes; defaults TRUE offset.axes proportion extend axes direction computed data; optional. add TRUE, add current plot; default FALSE. TRUE, error ellipse plotted. verbose TRUE, print MANOVA table details hypothesis tests; default FALSE.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"One-Dimensional HE Plots — heplot1d","text":"function invisibly returns object class \"heplot1d\", coordinates various hypothesis ellipses error ellipse, limits horizontal vertical axes. (methods manipulating objects currently available.) components : H ranges hypothesis terms E range E xlim x-axis limits","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"One-Dimensional HE Plots — heplot1d","text":"particular, given response, 1-D representations H E matrices correspond line segments. E ``ellipse'' shown filled rectangle whose width equals mean squared error response. H ``ellipse'' model term shown line segment whose length represents either size effect evidence effect. version initial sketch. Details implementation subject change.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"One-Dimensional HE Plots — heplot1d","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"One-Dimensional HE Plots — heplot1d","text":"","code":"## Plastics data plastic.mod <- lm(cbind(tear, gloss, opacity) ~ rate*additive, data=Plastic) heplot1d(plastic.mod, col=c(\"pink\",\"blue\")) heplot1d(plastic.mod, col=c(\"pink\",\"blue\"),variables=2) heplot1d(plastic.mod, col=c(\"pink\",\"blue\"),variables=3) ## Bees data bees.mod <- lm(cbind(Iz,Iy) ~ caste*treat*time, data=Bees) heplot1d(bees.mod) heplot1d(bees.mod, variables=2)"},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Three-Dimensional HE Plots — heplot3d","title":"Three-Dimensional HE Plots — heplot3d","text":"function plots ellipsoids 3D representing hypothesis error sums--squares--products matrices terms linear hypotheses multivariate linear model.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Three-Dimensional HE Plots — heplot3d","text":"","code":"heplot3d(mod, ...) # S3 method for mlm heplot3d( mod, terms, hypotheses, term.labels = TRUE, hyp.labels = TRUE, err.label = \"Error\", variables = 1:3, error.ellipsoid = !add, factor.means = !add, grand.mean = !add, remove.intercept = TRUE, type = c(\"II\", \"III\", \"2\", \"3\"), idata = NULL, idesign = NULL, icontrasts = c(\"contr.sum\", \"contr.poly\"), imatrix = NULL, iterm = NULL, manova, size = c(\"evidence\", \"effect.size\"), level = 0.68, alpha = 0.05, segments = 40, col = getOption(\"heplot3d.colors\", c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\")), lwd = c(1, 4), shade = TRUE, shade.alpha = 0.2, wire = c(TRUE, FALSE), bg.col = c(\"white\", \"black\"), fogtype = c(\"none\", \"exp2\", \"linear\", \"exp\"), fov = 30, offset = 0.01, xlab, ylab, zlab, xlim, ylim, zlim, cex.label = 1.5, add = FALSE, verbose = FALSE, warn.rank = FALSE, ... )"},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Three-Dimensional HE Plots — heplot3d","text":"mod model object class \"mlm\". ... arguments passed generic. terms logical value character vector terms model plot hypothesis matrices; missing TRUE, defaults terms; FALSE, terms plotted. hypotheses optional list linear hypotheses plot hypothesis matrices; hypotheses specified linearHypothesis function car package; list elements can named, case names used. term.labels logical value character vector names terms plotted. TRUE (default) names terms used; FALSE, term labels plotted. hyp.labels logical value character vector names hypotheses plotted. TRUE (default) names components list hypotheses used; FALSE, hypothesis labels plotted. err.label Label error ellipse variables indices names three response variables plotted; defaults 1:3. error.ellipsoid TRUE, plot error ellipsoid; defaults TRUE, argument add FALSE (see ). factor.means logical value character vector names factors means plotted, TRUE FALSE; defaults TRUE, argument add FALSE (see ). grand.mean TRUE, plot centroid data; defaults TRUE, argument add FALSE (see ). remove.intercept TRUE (default), plot ellipsoid intercept even MANOVA table. type ``type'' sum--squares--products matrices compute; one \"II\", \"III\", \"2\", \"3\", \"II\" default (\"2\" synonym). idata optional data frame giving factor factors defining intra-subject model multivariate repeated-measures data. See Details Anova explanation intra-subject design explanation arguments relating intra-subject factors. idesign one-sided model formula using ``data'' idata specifying intra-subject design repeated measure models. icontrasts names contrast-generating functions applied default factors ordered factors, respectively, within-subject ``data''; contrasts must produce intra-subject model matrix different terms orthogonal. default c(\"contr.sum\", \"contr.poly\"). imatrix lieu idata idesign, can specify intra-subject design matrix directly via imatrix, form list named elements. element gives columns within-subject model matrix intra-subject term tested, must many rows responses; columns within-subject model matrix different terms must mutually orthogonal. iterm repeated measures designs, must specify one intra-subject term (character string) select SSPE (E) matrix used plot. Hypothesis terms plotted include iterm effect well interactions iterm terms. manova optional Anova.mlm object model; absent MANOVA computed. Specifying argument can therefore save computation repeated calls. size scale hypothesis ellipsoid relative error ellipsoid; \"evidence\", default, scaling done ``significant'' hypothesis ellipsoid extends outside error ellipsoid; \"effect.size\", hypothesis ellipsoid scale error ellipsoid. level equivalent coverage ellipsoid normally-distributed errors, defaults 0.68. alpha significance level Roy's greatest-root test statistic; size=\"evidence\", hypothesis ellipsoid scaled just touches error ellipsoid specified alpha level; larger hypothesis ellipsoid therefore indicates statistical significance; defaults 0.05. segments number segments composing ellipsoid; defaults 40. col color vector colors use plotting ellipsoids; first color used error ellipsoid; remaining colors --- recycled necessary --- used hypothesis ellipsoid. single color can given, case used ellipsoid. convenience, default colors heplots produced given session can changed assigning color vector via options(heplot3d.colors=c(...). Otherwise, default colors c(\"pink\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\"). lwd two-element vector giving line width drawing ellipsoids (including degenerate ellipse) drawing ellipsoids degenerate line segment. default c(1, 4). shade logical scalar vector, indicating whether ellipsoids rendered shade3d. Works like col, except FALSE used 1 df degenerate ellipsoid. shade.alpha numeric value range [0,1], vector values, giving alpha transparency ellipsoids rendered shade=TRUE. wire logical scalar vector, indicating whether ellipsoids rendered wire3d. Works like col, except TRUE used 1 df degenerate ellipsoid. bg.col background colour, \"white\" \"black\", defaulting \"white\". fogtype type ``fog'' use depth-cueing; default \"none\". See bg. fov field view angle; controls perspective. See viewpoint. offset proportion axes set labels; defaults 0.01. xlab x-axis label; defaults name x variable. ylab y-axis label; defaults name y variable. zlab z-axis label; defaults name z variable. xlim x-axis limits; absent, computed data. ylim y-axis limits; absent, computed data. zlim z-axis limits; absent, computed data. cex.label text size ellipse labels add TRUE, add current plot; default FALSE. TRUE, error ellipsoid neither plotted returned output object. verbose TRUE, print MANOVA table details hypothesis tests; default FALSE. warn.rank TRUE, suppress warnings rank hypothesis matrix ellipsoid collapses ellipse line; default FALSE.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Three-Dimensional HE Plots — heplot3d","text":"heplot3d invisibly returns list containing bounding boxes error (E) ellipsoid term linear hypothesis specified call. 2 x 3 matrix rownames \"min\" \"max\" colnames corresponding variables plotted. additional component, center, contains coordinates centroid plot. function also leaves object named .frame global environment, containing rgl object IDs axes, axis labels, bounding box; deleted axes, etc. redrawn plot added .","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Three-Dimensional HE Plots — heplot3d","text":"H matrix term rank < 3, ellipsoid collapses ellipse (rank(H)=2) line (rank(H)=1). Rotating plot can particularly revealing, showing views H variation particularly large small relation E variation. See play3d movie3d details creating animations. arguments xlim, ylim, zlim can used expand bounding box axes, decrease .","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Three-Dimensional HE Plots — heplot3d","text":"Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples Journal Statistical Software, 17(6), 1-42. https://www.jstatsoft.org/v17/i06/ Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421-444. http://datavis.ca/papers/jcgs-heplots.pdf","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Three-Dimensional HE Plots — heplot3d","text":"","code":"# Soils data, from carData package data(Soils, package = \"carData\") soils.mod <- lm(cbind(pH,N,Dens,P,Ca,Mg,K,Na,Conduc) ~ Block + Contour*Depth, data=Soils) car::Anova(soils.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Block 3 1.6758 3.7965 27 81 1.777e-06 *** #> Contour 2 1.3386 5.8468 18 52 2.730e-07 *** #> Depth 3 1.7951 4.4697 27 81 8.777e-08 *** #> Contour:Depth 6 1.2351 0.8640 54 180 0.7311 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(soils.mod, variables=c(\"Ca\", \"Mg\")) pairs(soils.mod, terms=\"Depth\", variables=c(\"pH\", \"N\", \"P\", \"Ca\", \"Mg\")) heplot3d(soils.mod, variables=c(\"Mg\", \"Ca\", \"Na\"), wire=FALSE) # Plastic data plastic.mod <- lm(cbind(tear, gloss, opacity) ~ rate*additive, data=Plastic) if (FALSE) { heplot3d(plastic.mod, col=c(\"red\", \"blue\", \"brown\", \"green3\"), wire=FALSE) }"},{"path":"https://friendly.github.io/heplots/reference/heplots-internal.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal heplots functions — heplots-internal","title":"Internal heplots functions — heplots-internal","text":"Internal functions heplots package","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-internal.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal heplots functions — heplots-internal","text":"","code":"lambda.crit( alpha, p, dfh, dfe, test.statistic = c(\"Roy\", \"HLT\", \"Hotelling-Lawley\") ) Roy.crit(alpha, p, dfh, dfe) HLT.crit(alpha, p, dfh, dfe) he.rep(x, n) Pillai(eig, q, df.res) Wilks(eig, q, df.res) HL(eig, q, df.res) Roy(eig, q, df.res)"},{"path":"https://friendly.github.io/heplots/reference/heplots-internal.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal heplots functions — heplots-internal","text":"alpha significance level critical values multivariate statistics p Number variables dfh degrees freedom hypothesis dfe degrees freedom error test.statistic Test statistic used multivariate test x argument heplot heplot3d repeated Error hypothesis terms n Number hypothesis terms","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-internal.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal heplots functions — heplots-internal","text":"critical value test statistic","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-internal.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Internal heplots functions — heplots-internal","text":"functions calculate critical values multivariate test statistics (Wilks' Lambda, Hotelling-Lawley trace, Roy's maximum root test) used setting size H ellipses relative E. intended called user.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-internal.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Internal heplots functions — heplots-internal","text":"Michael Friendly friendly@yorku.ca","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-package.html","id":null,"dir":"Reference","previous_headings":"","what":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"heplots package provides functions visualizing hypothesis tests multivariate linear models (MANOVA, multivariate multiple regression, MANCOVA, repeated measures designs). plots represent sums--squares--products matrices linear hypotheses error using ellipses (two dimensions), ellipsoids (three dimensions), line segments one dimension.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"basic theory behind plots described Friendly (2007). See Fox, Friendly Monette (2007) brief introduction; Friendly & Sigal (2016) tutorial methods; Friendly, Monette Fox (2013) general discussion role elliptical geometry statistical understanding. topics now addressed include robust MLMs, tests equality covariance matrices MLMs, chi square Q-Q plots MLMs. package also provides collection data sets illustrating variety multivariate linear models types listed , together graphical displays. Several tutorial vignettes also included. See vignette(package=\"heplots\"). graphical functions contained display multivariate model effects variable (data) space, one response variables (contrasts among response variables repeated measures designs). list(list(\"heplot\")) constructs two-dimensional plots model terms linear hypotheses pairs response variables multivariate linear models. list(list(\"heplot3d\")) constructs analogous 3D plots triples response variables. list(list(\"pairs.mlm\")) constructs ``matrix'' pairwise plots. list(list(\"heplot1d\")) constructs 1-dimensional analogs plots model terms linear hypotheses single response variables. repeated measure designs, -subject effects within-subject effects must plotted separately, error terms (E matrices) differ. terms involving within-subject effects, functions carry linear transformation matrix Y responses matrix Y M, M model matrix term intra-subject design produce plots H E matrices transformed space. vignette repeated describes graphical methods repeated measures designs. related car package calculates Type II Type III tests multivariate linear hypotheses using Anova linearHypothesis functions. candisc-package package provides functions visualizing effects MLM model terms low-dimensional canonical space shows largest hypothesis relative error variation. candisc package now also includes related methods canonical correlation analysis. heplots package also contains large number multivariate data sets examples analyses graphic displays. Use data(package=\"heplots\") see current list.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-package.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples. Journal Statistical Software, 17(6), 1-42. https://www.jstatsoft.org/v17/i06/, doi:10.18637/jss.v017.i06 Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421-444. http://datavis.ca/papers/jcgs-heplots.pdf, doi:10.1198/106186007X208407 Fox, J., Friendly, M. & Monette, G. (2007). Visual hypothesis tests multivariate linear models: heplots package R. DSC 2007: Directions Statistical Computing. https://socialsciences.mcmaster.ca/jfox/heplots-dsc-paper.pdf Friendly, M. (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 . Fox, J., Friendly, M. & Weisberg, S. (2013). Hypothesis Tests Multivariate Linear Models Using car Package. R Journal, 5(1), https://journal.r-project.org/archive/2013-1/fox-friendly-weisberg.pdf. Friendly, M., Monette, G. & Fox, J. (2013). Elliptical Insights: Understanding Statistical Methods Elliptical Geometry. Statistical Science, 2013, 28 (1), 1-39, http://datavis.ca/papers/ellipses.pdf. Friendly, M. & Sigal, M. (2014). Recent Advances Visualizing Multivariate Linear Models. Revista Colombiana de Estadistica, 37, 261-283 Friendly, M. & Sigal, M. (2016). Graphical Methods Multivariate Linear Models Psychological Research: R Tutorial. Submitted publication.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/heplots-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"Michael Friendly, John Fox, Georges Monette Maintainer: Michael Friendly, friendly@yorku.ca, http://datavis.ca","code":""},{"path":"https://friendly.github.io/heplots/reference/Hernior.html","id":null,"dir":"Reference","previous_headings":"","what":"Recovery from Elective Herniorrhaphy — Hernior","title":"Recovery from Elective Herniorrhaphy — Hernior","text":"data set measures post-operative recovery 32 patients undergoing elective herniorrhaphy operation, relation pre-operative measures.","code":""},{"path":"https://friendly.github.io/heplots/reference/Hernior.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Recovery from Elective Herniorrhaphy — Hernior","text":"data frame 32 observations following 9 variables. age patient age sex patient sex, factor levels f m pstat physical status (ignoring associated operation). 1-5 scale, 1=perfect health, 5=poor health. build body build, 1-5 scale, 1=emaciated, 2=thin, 3=average, 4=fat, 5=obese. cardiac preoperative complications heart, 1-4 scale, 1=none, 2=mild, 3=moderate, 4=severe. resp preoperative complications respiration, 1-4 scale, 1=none, 2=mild, 3=moderate, 4=severe. leave condition upon leaving recovery room, 1-4 scale, 1=routine recovery, 2=intensive care observation overnight, 3=intensive care, moderate care required, 4=intensive care, moderate care required. los length stay hospital operation (days) nurse level nursing required one week operation, 1-5 scale, 1=intense, 2=heavy, 3=moderate, 4=light, 5=none (?); see Details","code":""},{"path":"https://friendly.github.io/heplots/reference/Hernior.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Recovery from Elective Herniorrhaphy — Hernior","text":"Mosteller, F. Tukey, J. W. (1977), Data analysis regression, Reading, MA: Addison-Wesley. Data Exhibit 8, 567-568. source: study B. McPeek J. P. Gilbert Harvard Anesthesia Center.","code":""},{"path":"https://friendly.github.io/heplots/reference/Hernior.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Recovery from Elective Herniorrhaphy — Hernior","text":"leave, nurse los outcome measures; remaining variables potential predictors recovery status. variable nurse recorded 1-4, remaining (20) entries entered \"-\" sources. clear whether means \"none\" NA. former interpretation used constructing R data frame, nurse==5 observations. Using Hernior$nurse[Hernior$nurse==5] <- NA change interpretation, render nurse useless multivariate analysis. ordinal predictors instead treated factors, also potential interactions explored.","code":""},{"path":"https://friendly.github.io/heplots/reference/Hernior.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Recovery from Elective Herniorrhaphy — Hernior","text":"Hand, D. J., Daly, F., Lunn, . D., McConway, K. J. Ostrowski, E. (1994), Handbook Small Data Sets, Number 484, 390-391.","code":""},{"path":"https://friendly.github.io/heplots/reference/Hernior.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Recovery from Elective Herniorrhaphy — Hernior","text":"","code":"library(car) data(Hernior) str(Hernior) #> 'data.frame':\t32 obs. of 9 variables: #> $ age : int 78 60 68 62 76 76 64 74 68 79 ... #> $ sex : Factor w/ 2 levels \"f\",\"m\": 2 2 2 2 2 2 2 1 2 1 ... #> $ pstat : int 2 2 2 3 3 1 1 2 3 2 ... #> $ build : int 3 3 3 5 4 3 2 3 4 2 ... #> $ cardiac: int 1 2 1 3 3 1 1 2 2 1 ... #> $ resp : int 1 2 1 1 2 1 2 2 1 1 ... #> $ leave : int 2 2 1 1 2 1 1 1 1 2 ... #> $ los : int 9 4 7 35 9 7 5 16 7 11 ... #> $ nurse : num 3 5 4 3 4 5 5 3 5 3 ... Hern.mod <- lm(cbind(leave, nurse, los) ~ age + sex + pstat + build + cardiac + resp, data=Hernior) car::Anova(Hern.mod, test=\"Roy\") # actually, all tests are identical #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> age 1 0.16620 1.2742 3 23 0.30668 #> sex 1 0.02681 0.2055 3 23 0.89150 #> pstat 1 0.50028 3.8355 3 23 0.02309 * #> build 1 0.34506 2.6455 3 23 0.07318 . #> cardiac 1 0.29507 2.2622 3 23 0.10820 #> resp 1 0.32969 2.5277 3 23 0.08245 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test overall regression print(linearHypothesis(Hern.mod, c(\"age\", \"sexm\", \"pstat\", \"build\", \"cardiac\", \"resp\")), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 6 1.1019849 2.419161 18 75.00000 0.00413563 ** #> Wilks 6 0.2173439 2.604648 18 65.53911 0.00252395 ** #> Hotelling-Lawley 6 2.2679660 2.729959 18 65.00000 0.00162850 ** #> Roy 6 1.5543375 6.476406 6 25.00000 0.00032318 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # joint test of age, sex & caridac print(linearHypothesis(Hern.mod, c(\"age\", \"sexm\", \"cardiac\")), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 3 0.3826974 1.218485 9 75.00000 0.296709 #> Wilks 3 0.6305421 1.301115 9 56.12656 0.257126 #> Hotelling-Lawley 3 0.5649409 1.360043 9 65.00000 0.224709 #> Roy 3 0.5249507 4.374589 3 25.00000 0.013162 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # HE plots clr <- c(\"red\", \"darkgray\", \"blue\", \"darkgreen\", \"magenta\", \"brown\", \"black\") heplot(Hern.mod, col=clr) pairs(Hern.mod, col=clr) ## Enhancing the pairs plot ... # create better variable labels vlab <- c(\"LeaveCondition\\n(leave)\", \"NursingCare\\n(nurse)\", \"LengthOfStay\\n(los)\") # Add ellipse to test all 5 regressors simultaneously hyp <- list(\"Regr\" = c(\"age\", \"sexm\", \"pstat\", \"build\", \"cardiac\", \"resp\")) pairs(Hern.mod, hypotheses=hyp, col=clr, var.labels=vlab) ## Views in canonical space for the various predictors if (require(candisc)) { Hern.canL <- candiscList(Hern.mod) plot(Hern.canL, term=\"age\") plot(Hern.canL, term=\"sex\") plot(Hern.canL, term=\"pstat\") # physical status } #> Loading required package: candisc #> #> Attaching package: 'candisc' #> The following object is masked from 'package:stats': #> #> cancor"},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot an Interpolation Between Two Related Data Sets — interpPlot","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"Plot interpolation two related data sets, typically transformations . function designed used animations.","code":""},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"","code":"interpPlot( xy1, xy2, alpha, xlim, ylim, points = TRUE, add = FALSE, col = palette()[1], ellipse = FALSE, ellipse.args = NULL, abline = FALSE, col.lines = palette()[2], lwd = 2, id.method = \"mahal\", labels = rownames(xy1), id.n = 0, id.cex = 1, id.col = palette()[1], segments = FALSE, segment.col = \"darkgray\", ... )"},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"xy1 First data set, 2-column matrix data.frame xy2 Second data set, 2-column matrix data.frame alpha value interpolation fraction, typically (necessarily) 0 <= alpha <= 1). xlim, ylim x, y limits plot. specified, function uses ranges rbind(xy1, xy2). points Logical. Whether plot points current interpolation? add Logical. Whether add existing plot? col Color plotted points. ellipse logical. TRUE plot dataEllipse ellipse.args arguments passed dataEllipse abline logical. TRUE plot linear regression line XY col.lines line color lwd line width id.method points identified. See showLabels. labels observation labels id.n Number points identified. set zero, points identified. id.cex Controls size plotted labels. default 1 id.col Controls color plotted labels. segments logical. TRUE draw lines segments xy1 xy segment.col line color segments ... arguments passed plot()","code":""},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"Returns invisibly interpolated XY points.","code":""},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"Points plotted via linear interpolation, $$ XY = XY1 + \\alpha (XY2 - XY1)$$ function allows plotting data ellipse, linear regression line, line segments showing movement points. Interpolations linear can obtained using non-linear series alpha values. example alpha=sin(seq(0,1,.1)/sin(1) give sinusoid interpolation.","code":""},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"examples just use -screen animations console graphics window. animation package provides facilities save various formats.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"","code":"################################################# # animate an AV plot from marginal to conditional ################################################# data(Duncan, package=\"carData\") duncmod <- lm(prestige ~ income + education, data=Duncan) mod.mat <- model.matrix(duncmod) # function to do an animation for one variable dunc.anim <- function(variable, other, alpha=seq(0, 1, .1)) { var <- which(variable==colnames(mod.mat)) duncdev <- scale(Duncan[,c(variable, \"prestige\")], scale=FALSE) duncav <- lsfit(mod.mat[, -var], cbind(mod.mat[, var], Duncan$prestige), intercept = FALSE)$residuals colnames(duncav) <- c(variable, \"prestige\") lims <- apply(rbind(duncdev, duncav),2,range) for (alp in alpha) { main <- if(alp==0) paste(\"Marginal plot:\", variable) else paste(round(100*alp), \"% Added-variable plot:\", variable) interpPlot(duncdev, duncav, alp, xlim=lims[,1], ylim=lims[,2], pch=16, main = main, xlab = paste(variable, \"| \", alp, other), ylab = paste(\"prestige | \", alp, other), ellipse=TRUE, ellipse.args=(list(levels=0.68, fill=TRUE, fill.alpha=alp/2)), abline=TRUE, id.n=3, id.cex=1.2, cex.lab=1.25) Sys.sleep(1) } } # show these in the R console if(interactive()) { dunc.anim(\"income\", \"education\") dunc.anim(\"education\", \"income\") } ############################################ # correlated bivariate data with 2 outliers # show rotation from data space to PCA space ############################################ set.seed(123345) x <- c(rnorm(100), 2, -2) y <- c(x[1:100] + rnorm(100), -2, 2) XY <- cbind(x=x, y=y) rownames(XY) <- seq_along(x) XY <- scale(XY, center=TRUE, scale=FALSE) # start, end plots car::dataEllipse(XY, pch=16, levels=0.68, id.n=2) #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter mod <- lm(y~x, data=as.data.frame(XY)) abline(mod, col=\"red\", lwd=2) pca <- princomp(XY, cor=TRUE) scores <- pca$scores car::dataEllipse(scores, pch=16, levels=0.68, id.n=2) #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter abline(lm(Comp.2 ~ Comp.1, data=as.data.frame(scores)), lwd=2, col=\"red\") # show interpolation # functions for labels, as a function of alpha main <- function(alpha) {if(alpha==0) \"Original data\" else if(alpha==1) \"PCA scores\" else paste(round(100*alpha,1), \"% interpolation\")} xlab <- function(alpha) {if(alpha==0) \"X\" else if(alpha==1) \"PCA.1\" else paste(\"X +\", alpha, \"(X - PCA.1)\")} ylab <- function(alpha) {if(alpha==0) \"Y\" else if(alpha==1) \"PCA.2\" else paste(\"Y +\", alpha, \"(Y - PCA.2)\")} interpPCA <- function(XY, alpha = seq(0,1,.1)) { XY <- scale(XY, center=TRUE, scale=FALSE) if (is.null(rownames(XY))) rownames(XY) <- 1:nrow(XY) pca <- princomp(XY, cor=TRUE) scores <- pca$scores for (alp in alpha) { interpPlot(XY, scores, alp, pch=16, main = main(alp), xlab = xlab(alp), ylab = ylab(alp), ellipse=TRUE, ellipse.args=(list(levels=0.68, fill=TRUE, fill.alpha=(1-alp)/2)), abline=TRUE, id.n=2, id.cex=1.2, cex.lab=1.25, segments=TRUE) Sys.sleep(1) } } # show in R console if(interactive()) { interpPCA(XY) } if (FALSE) { library(animation) saveGIF({ interpPCA(XY, alpha <- seq(0,1,.1))}, movie.name=\"outlier-demo.gif\", ani.width=480, ani.height=480, interval=1.5) }"},{"path":"https://friendly.github.io/heplots/reference/Iwasaki_Big_Five.html","id":null,"dir":"Reference","previous_headings":"","what":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","title":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","text":"dataset, Grice & Iwasaki (2007), gives scores five personality scales NEO PI-r (Costa & McCrae, 1992), called \"Big Five\" personality traits: Neuroticism, Extraversion, Openness--Experience, Agreeableness, Conscientiousness.","code":""},{"path":"https://friendly.github.io/heplots/reference/Iwasaki_Big_Five.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","text":"data frame 203 observations following 7 variables. ID ID number Group factor levels Eur Asian_Amer Asian_Intl N Neuroticism score E Extraversion score O Openness score Agreeableness score C Conscientiousness score","code":""},{"path":"https://friendly.github.io/heplots/reference/Iwasaki_Big_Five.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","text":"Grice, J., & Iwasaki, M. (2007). truly multivariate approach MANOVA. Applied Multivariate Research, 12, 199-226. https://doi.org/10.22329/amr.v12i3.660.","code":""},{"path":"https://friendly.github.io/heplots/reference/Iwasaki_Big_Five.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","text":"groups : Eur European Americans (Caucasians living United States entire lives) Asian_Amer Asian Americans (Asians living United States since age 6 years) Asian_Intl Asian Internationals (Asians moved United States 6th birthday) factor Group set compare E vs. Asian two Asian groups","code":""},{"path":"https://friendly.github.io/heplots/reference/Iwasaki_Big_Five.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","text":"Costa Jr, P. T., & McCrae, R. R. (1992). Revised NEO Personality Inventory (NEO PI-R) NEO Five-Factor Inventory (NEOFFI) professional manual. Psychological Assessment Resources.","code":""},{"path":"https://friendly.github.io/heplots/reference/Iwasaki_Big_Five.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","text":"","code":"data(Iwasaki_Big_Five) str(Iwasaki_Big_Five) #> tibble [203 × 7] (S3: tbl_df/tbl/data.frame) #> $ ID : num [1:203] 1 2 3 4 5 6 7 8 9 10 ... #> $ Group: Factor w/ 3 levels \"Eur\",\"Asian_Amer\",..: 3 3 3 3 3 3 3 3 3 3 ... #> ..- attr(*, \"contrasts\")= num [1:3, 1:2] 2 -1 -1 0 1 -1 #> .. ..- attr(*, \"dimnames\")=List of 2 #> .. .. ..$ : chr [1:3] \"Eur\" \"Asian_Amer\" \"Asian_Intl\" #> .. .. ..$ : NULL #> $ N : num [1:203] 87 101 63 104 70 63 77 123 76 59 ... #> $ E : num [1:203] 117 134 135 118 114 131 140 122 141 133 ... #> $ O : num [1:203] 130 123 111 108 110 108 118 115 109 104 ... #> $ A : num [1:203] 124 115 71 107 119 125 131 99 134 130 ... #> $ C : num [1:203] 127 124 134 111 120 138 103 107 142 126 ... mod <- lm(cbind(N, E, O, A, C) ~ Group, data=Iwasaki_Big_Five) car::Anova(mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Group 2 0.41862 10.43 10 394 1.106e-15 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # heplots labs <- c(\"Neuroticism\", \"Extraversion\", \"Openness\", \"Agreeableness\", \"Consientiousness\" ) heplot(mod, fill = TRUE, fill.alpha = 0.2, cex.lab = 1.5, xlab = labs[1], ylab = labs[2]) heplot(mod, variables = c(2,5), fill = TRUE, fill.alpha = 0.2, cex.lab = 1.5, xlab = labs[2], ylab = labs[5]) pairs(mod, fill = TRUE, fill.alpha = 0.2, var.labels = labs)"},{"path":"https://friendly.github.io/heplots/reference/label.ellipse.html","id":null,"dir":"Reference","previous_headings":"","what":"Label an ellipse — label.ellipse","title":"Label an ellipse — label.ellipse","text":"label.ellipse used draw text label ellipse center somewhere around periphery flexible way.","code":""},{"path":"https://friendly.github.io/heplots/reference/label.ellipse.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Label an ellipse — label.ellipse","text":"","code":"label.ellipse( ellipse, label, col = \"black\", label.pos = NULL, xpd = TRUE, tweak = 0.5 * c(strwidth(\"M\"), strheight(\"M\")), ... )"},{"path":"https://friendly.github.io/heplots/reference/label.ellipse.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Label an ellipse — label.ellipse","text":"ellipse two-column matrix coordinates ellipse boundary label Character string used ellipse label col Label color label.pos Label position relative ellipse. See details xpd label allowed extend beyond plot limits? tweak vector two lengths used tweak label positions ... parameters passed text, e.g., cex, ...","code":""},{"path":"https://friendly.github.io/heplots/reference/label.ellipse.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Label an ellipse — label.ellipse","text":"label.pos=NULL, function uses sign correlation represented ellipse determine position top (\\(r>=0\\)) bottom (\\(r<0\\)) ellipse. Integer values 0, 1, 2, 3 4, respectively indicate positions center, , left , right max/min coordinates ellipse. Label positions can also specified corresponding character strings c(\"center\", \"bottom\", \"left\", \"top\", \"right\"), compass directions, c(\"C\", \"S\", \"W\", \"N\", \"E\"), integer label.pos values, 5:nrow(ellipse) taken indices row coordinates used ellipse label. Equivalently, label.pos can also fraction (0,1), interpreted fraction way around unit circle, counterclockwise point (1,0).","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/label.ellipse.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Label an ellipse — label.ellipse","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/label.ellipse.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Label an ellipse — label.ellipse","text":"","code":"circle <- function(center=c(0,0), radius=1, segments=60) { angles <- (0:segments)*2*pi/segments circle <- radius * cbind( cos(angles), sin(angles)) t( c(center) + t( circle )) } label_demo <- function(ell) { plot(-2:2, -2:2, type=\"n\", asp=1, main=\"label.pos values and points (0:60)\") lines(ell, col=\"gray\") points(0, 0, pch=\"+\", cex=2) labs <- c(\"center\", \"bot\", \"left\", \"top\", \"right\") for (i in 0:4) { label.ellipse(ell, label=paste(i, \":\", labs[i+1]), label.pos = i) } for( i in 5*c(1,2, 4,5, 7,8, 10,11)) { points(ell[i,1], ell[i,2], pch=16) label.ellipse(ell, label=i, label.pos=i) } } circ <- circle(radius=1.8) label_demo(circ) ell <-circ %*% chol(matrix( c(1, .5, .5, 1), 2, 2)) label_demo(ell)"},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":null,"dir":"Reference","previous_headings":"","what":"Levene Tests of Homogeneity of Variances — leveneTests","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"function extends leveneTest multivariate response setting. performs Levene test homogeneity variances set response variables, prints compact summary.","code":""},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"","code":"leveneTests(y, group, center = median, ...)"},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"y data frame matrix numeric response variables multivariate linear model. group vector factor object giving group corresponding elements rows y center name function compute center group; mean gives original Levene's (1960) test; default, median, provides robust test suggested Brown Forsythe (1974). ... arguments, passed leveneTest","code":""},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"object classes \"anova\" \"data.frame\", one observation response variable y.","code":""},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"Levene, H. (1960). Robust Tests Equality Variances. Olkin, . et al. (Eds.), Contributions Probability Statistics: Essays Honor Harold Hotelling, Stanford University Press, 278-292. Brown, M. B. & Forsythe, . B. (1974). Robust Tests Equality Variances Journal American Statistical Association, 69, 364-367.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"","code":"leveneTests(iris[,1:4], iris$Species) #> Levene's Tests for Homogeneity of Variance (center = median) #> #> df1 df2 F value Pr(>F) #> Sepal.Length 2 147 6.3527 0.002259 ** #> Sepal.Width 2 147 0.5902 0.555518 #> Petal.Length 2 147 19.4803 3.129e-08 *** #> Petal.Width 2 147 19.8924 2.261e-08 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # handle a 1-column response? leveneTests(iris[,1, drop=FALSE], iris$Species) #> Levene's Tests for Homogeneity of Variance (center = median) #> #> df1 df2 F value Pr(>F) #> Sepal.Length 2 147 6.3527 0.002259 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 data(Skulls, package=\"heplots\") leveneTests(Skulls[,-1], Skulls$epoch) #> Levene's Tests for Homogeneity of Variance (center = median) #> #> df1 df2 F value Pr(>F) #> mb 4 145 1.0367 0.3905 #> bh 4 145 0.7171 0.5816 #> bl 4 145 0.6797 0.6071 #> nh 4 145 1.0418 0.3878"},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"function uses asymptotic results described Cai et. al (2016), Theorem 1, calculate approximate, normal theory confidence intervals (CIs) log determinant one sample covariance matrices.","code":""},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"","code":"logdetCI(cov, n, conf = 0.95, method = 1, bias.adj = TRUE)"},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"cov covariance matrix (named) list covariance matrices, size n sample size, vector sample sizes, one covariance matrix conf confidence level method Three methods provided, based Cai et. al Theorem 1 (method=1), Corollary 1 (method=2) Corollary 2 (method=3), different bias SE values. bias.adj logical; set FALSE exclude bias correction term.","code":""},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"data frame one row covariance matrix. lower upper boundaries confidence intervals. columns logdet, bias, se.","code":""},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"results translated CI via approximation $$ \\log det( \\widehat{\\Sigma} ) - bias \\pm z_{1 - \\alpha/2} \\times SE $$ \\(\\widehat{\\Sigma}\\) sample estimate population covariance matrix, \\(bias\\) bias correction constant \\(SE\\) width factor confidence interval. \\(bias\\) \\(SE\\) functions sample size, \\(n\\) number variables, \\(p\\). function included provide approximation graphical accuracy use Box's M test equality covariance matrices, boxM associated plot.boxM method. Cai et. al (2015) claim Theorem 1 holds either \\(p\\) fixed \\(p(n)\\) growing \\(n\\), long \\(p(n) \\le n\\). Corollary 1 (method=2) special case \\(p\\) fixed. Corollary 2 (method=3) special case \\(0 \\le p/n < 1\\) fixed. properties CI estimator unknown small moderate sample sizes, seems one available. therefore experimental version package subject change future. \\(bias\\) term offsets confidence interval sample estimate \\( \\log det( \\widehat{\\Sigma} ) \\). \\(p\\) large relative \\(n\\), confidence interval may overlap sample estimate. Strictly speaking, estimator applies MLE covariance matrix \\( \\widehat{\\Sigma}\\), .e., using \\(n\\) rather \\(n-1\\) divisor. factor \\((n-1 / n)\\) yet taken account .","code":""},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"Cai, T. T.; Liang, T. & Zhou, H. H. (2015) Law log determinant sample covariance matrix optimal estimation differential entropy high-dimensional Gaussian distributions. Journal Multivariate Analysis, 137, 161-172. doi:10.1016/j.jmva.2015.02.003","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"","code":"data(iris) iris.mod <- lm(as.matrix(iris[,1:4]) ~ iris$Species) iris.boxm <- boxM(iris.mod) cov <- c(iris.boxm$cov, list(pooled=iris.boxm$pooled)) n <- c(rep(50, 3), 150) CI <- logdetCI( cov, n=n, conf=.95, method=1) CI #> logdet bias se lower upper #> setosa -13.067360 -0.20598584 0.4062465 -13.657603 -12.065146 #> versicolor -10.874325 -0.20598584 0.4062465 -11.464568 -9.872111 #> virginica -8.927058 -0.20598584 0.4062465 -9.517301 -7.924844 #> pooled -9.958539 -0.06731274 0.2321101 -10.346154 -9.436299 plot(iris.boxm, xlim=c(-14, -8), main=\"Iris data, Box's M test\", gplabel=\"Species\") arrows(CI$lower, 1:4, CI$upper, 1:4, lwd=3, angle=90, len=.1, code=3) CI <- logdetCI( cov, n=n, conf=.95, method=1, bias.adj=FALSE) CI #> logdet bias se lower upper #> setosa -13.067360 0 0.4062465 -13.863589 -12.271132 #> versicolor -10.874325 0 0.4062465 -11.670553 -10.078097 #> virginica -8.927058 0 0.4062465 -9.723287 -8.130830 #> pooled -9.958539 0 0.2321101 -10.413466 -9.503611 plot(iris.boxm, xlim=c(-14, -8), main=\"Iris data, Box's M test\", gplabel=\"Species\") arrows(CI$lower, 1:4, CI$upper, 1:4, lwd=3, angle=90, len=.1, code=3)"},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":null,"dir":"Reference","previous_headings":"","what":"Classical and Robust Mahalanobis Distances — Mahalanobis","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"function convenience wrapper mahalanobis offering also possibility calculate robust Mahalanobis squared distances using MCD MVE estimators center covariance (cov.rob)","code":""},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"","code":"Mahalanobis( x, center, cov, method = c(\"classical\", \"mcd\", \"mve\"), nsamp = \"best\", ... )"},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"x numeric matrix data frame , say, \\(p\\) columns center mean vector data; cov supplied, function simply calls mahalanobis calculate result cov covariance matrix (p x p) data method estimation method used center covariance, one : \"classical\" (product-moment), \"mcd\" (minimum covariance determinant), \"mve\" (minimum volume ellipsoid). nsamp passed cov.rob ... arguments passed cov.rob","code":""},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"vector length nrow(x) containing squared distances.","code":""},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"missing data row x causes NA returned row.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"","code":"summary(Mahalanobis(iris[, 1:4])) #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.3195 2.1871 3.0628 3.9733 4.8053 13.1011 summary(Mahalanobis(iris[, 1:4], method=\"mve\")) #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.4461 2.5331 4.0110 5.5585 6.8295 25.7951 summary(Mahalanobis(iris[, 1:4], method=\"mcd\")) #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.4352 2.7301 5.7160 19.2207 36.7121 98.0335"},{"path":"https://friendly.github.io/heplots/reference/mark.H0.html","id":null,"dir":"Reference","previous_headings":"","what":"Mark a point null hypothesis in an HE plot — mark.H0","title":"Mark a point null hypothesis in an HE plot — mark.H0","text":"utility function draw label point 2D (3D) plot corresponding point null hypothesis tested. useful repeated measure designs null hypotheses within-S effects often correspond (0,0).","code":""},{"path":"https://friendly.github.io/heplots/reference/mark.H0.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mark a point null hypothesis in an HE plot — mark.H0","text":"","code":"mark.H0( x = 0, y = 0, z = NULL, label, cex = 2, pch = 19, col = \"green3\", lty = 2, pos = 2 )"},{"path":"https://friendly.github.io/heplots/reference/mark.H0.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Mark a point null hypothesis in an HE plot — mark.H0","text":"x Horizontal coordinate H0 y Vertical coordinate H0 z z coordinate H0. NULL, function assumes heplot3d plot drawn. label Text used label point. Defaults expression(H[0]) 2D plots. cex Point text size. 3D plots, function uses size=5*cex call points3d. pch Plot character. Ignored 3D plots. col Color text, character lines lty Line type vertical horizontal reference lines. drawn lty=0. pos Position text. Ignored 3D plots","code":""},{"path":"https://friendly.github.io/heplots/reference/mark.H0.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Mark a point null hypothesis in an HE plot — mark.H0","text":"None. Used side effect drawing current plot.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/mark.H0.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Mark a point null hypothesis in an HE plot — mark.H0","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/mark.H0.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Mark a point null hypothesis in an HE plot — mark.H0","text":"","code":"Vocab.mod <- lm(cbind(grade8,grade9,grade10,grade11) ~ 1, data=VocabGrowth) idata <-data.frame(grade=ordered(8:11)) heplot(Vocab.mod, type=\"III\", idata=idata, idesign=~grade, iterm=\"grade\", main=\"HE plot for Grade effect\") mark.H0()"},{"path":"https://friendly.github.io/heplots/reference/mathscore.html","id":null,"dir":"Reference","previous_headings":"","what":"Math scores for basic math and word problems — mathscore","title":"Math scores for basic math and word problems — mathscore","text":"Scores two groups school children taught different math teachers tested basic math (BM) problems solving word problems (WP).","code":""},{"path":"https://friendly.github.io/heplots/reference/mathscore.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Math scores for basic math and word problems — mathscore","text":"data frame 12 observations following 3 variables. group factor levels 1 2 BM Basic Math score, numeric vector WP Word Problems score, numeric vector","code":""},{"path":"https://friendly.github.io/heplots/reference/mathscore.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Math scores for basic math and word problems — mathscore","text":"Fictitious data","code":""},{"path":"https://friendly.github.io/heplots/reference/mathscore.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Math scores for basic math and word problems — mathscore","text":"","code":"data(mathscore) str(mathscore) #> 'data.frame':\t12 obs. of 3 variables: #> $ group: Factor w/ 2 levels \"1\",\"2\": 1 1 1 1 1 1 2 2 2 2 ... #> $ BM : int 190 170 180 200 150 180 160 190 150 160 ... #> $ WP : int 90 80 80 120 60 70 120 150 90 130 ... math.mod <- lm(cbind(BM, WP) ~ group, data=mathscore) car::Anova(math.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> group 1 0.86518 28.878 2 9 0.0001213 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # scatterplot with data ellipses car::scatterplot(WP ~ BM | group, data=mathscore, ellipse=list(levels=0.68), smooth=FALSE, pch=c(15,16), legend=list(coords = \"topright\")) # HE plot heplot(math.mod, fill=TRUE, cex=2, cex.lab=1.8, xlab=\"Basic math\", ylab=\"Word problems\")"},{"path":"https://friendly.github.io/heplots/reference/MockJury.html","id":null,"dir":"Reference","previous_headings":"","what":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","title":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","text":"Male participants shown picture one three young women. Pilot work indicated one woman beautiful, another average physical attractiveness, third unattractive. Participants rated woman saw twelve attributes. measures used check manipulation photo.","code":""},{"path":"https://friendly.github.io/heplots/reference/MockJury.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","text":"data frame 114 observations following 17 variables. Attr Attractiveness photo, factor levels Beautiful Average Unattractive Crime Type crime, factor levels Burglary (theft items victim's room) Swindle (conned male victim) Years length sentence given defendant mock juror subject Serious rating serious subject thought defendant's crime exciting rating photo 'exciting' calm rating photo 'calm' independent rating photo 'independent' sincere rating photo 'sincere' warm rating photo 'warm' phyattr rating photo 'physical attractiveness' sociable rating photo 'exciting' kind rating photo 'kind' intelligent rating photo 'intelligent' strong rating photo 'strong' sophisticated rating photo 'sophisticated' happy rating photo 'happy' ownPA self-rating subject 'physical attractiveness'","code":""},{"path":"https://friendly.github.io/heplots/reference/MockJury.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","text":"Dr. Wuensch's StatData Page, http://core.ecu.edu/psyc/wuenschk/StatData/PLASTER.dat","code":""},{"path":"https://friendly.github.io/heplots/reference/MockJury.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","text":"participants told person photo committed Crime, asked rate seriousness crime recommend prison sentence, Years. attractiveness \"defendant\" influence sentence perceived seriousness crime? attractiveness interact nature crime?","code":""},{"path":"https://friendly.github.io/heplots/reference/MockJury.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","text":"Data thesis Plaster, M. E. (1989). Inmates mock jurors: effects physical attractiveness upon juridic decisions. M.. thesis, Greenville, NC: East Carolina University.","code":""},{"path":"https://friendly.github.io/heplots/reference/MockJury.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","text":"","code":"# manipulation check: test ratings of the photos classified by Attractiveness jury.mod1 <- lm( cbind(phyattr, happy, independent, sophisticated) ~ Attr, data=MockJury) car::Anova(jury.mod1, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Attr 2 1.7672 48.156 4 109 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(jury.mod1, main=\"HE plot for manipulation check\") pairs(jury.mod1) if (require(candisc)) { jury.can <- candisc(jury.mod1) jury.can heplot(jury.can, main=\"Canonical HE plot\") } #> Vector scale factor set to 8.817675 # influence of Attr of photo and nature of crime on Serious and Years jury.mod2 <- lm( cbind(Serious, Years) ~ Attr * Crime, data=MockJury) car::Anova(jury.mod2, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Attr 2 0.075607 4.0828 2 108 0.01953 * #> Crime 1 0.004697 0.2513 2 107 0.77824 #> Attr:Crime 2 0.050104 2.7056 2 108 0.07136 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(jury.mod2) # stepdown test (ANCOVA), controlling for Serious jury.mod3 <- lm( Years ~ Serious + Attr * Crime, data=MockJury) car::Anova(jury.mod3) #> Anova Table (Type II tests) #> #> Response: Years #> Sum Sq Df F value Pr(>F) #> Serious 379.49 1 41.1423 3.938e-09 *** #> Attr 74.22 2 4.0230 0.02067 * #> Crime 3.92 1 0.4255 0.51563 #> Attr:Crime 49.30 2 2.6723 0.07370 . #> Residuals 986.95 107 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # need to consider heterogeneous slopes? jury.mod4 <- lm( Years ~ Serious * Attr * Crime, data=MockJury) car::Anova(jury.mod3, jury.mod4) #> Anova Table (Type II tests) #> #> Response: Years #> Sum Sq Df F value Pr(>F) #> Serious 379.49 1 42.9427 2.338e-09 *** #> Attr 74.22 2 4.1991 0.01768 * #> Crime 3.92 1 0.4441 0.50667 #> Attr:Crime 49.30 2 2.7892 0.06616 . #> Residuals 901.38 102 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"},{"path":"https://friendly.github.io/heplots/reference/NeuroCog.html","id":null,"dir":"Reference","previous_headings":"","what":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","title":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","text":"primary purpose study (Hartman, 2016, Heinrichs et al. (2015)) evaluate patterns levels performance neurocognitive measures among individuals schizophrenia schizoaffective disorder using well-validated, comprehensive neurocognitive battery specifically designed individuals psychosis (Heinrichs et al. (2008))","code":""},{"path":"https://friendly.github.io/heplots/reference/NeuroCog.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","text":"data frame 242 observations following 10 variables. Dx Diagnostic group, factor levels Schizophrenia Schizoaffective Control Speed Speed processing domain T score, numeric vector Attention Attention/Vigilance Domain T score, numeric vector Memory Working memory numeric vector Verbal Verbal Learning Domain T score, numeric vector Visual Visual Learning Domain T score, numeric vector ProbSolv Reasoning/Problem Solving Domain T score, numeric vector SocialCog Social Cognition Domain T score, numeric vector Age Subject age, numeric vector Sex Subject gender, factor levels Female Male","code":""},{"path":"https://friendly.github.io/heplots/reference/NeuroCog.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","text":"Hartman, L. . (2016). Schizophrenia Schizoaffective Disorder: One Condition Two? Unpublished PhD dissertation, York University. Heinrichs, R.W., Pinnock, F., Muharib, E., Hartman, L.., Goldberg, J.O., & McDermid Vaz, S. (2015). Neurocognitive normality schizophrenia revisited. Schizophrenia Research: Cognition, 2 (4), 227-232. doi: 10.1016/j.scog.2015.09.001","code":""},{"path":"https://friendly.github.io/heplots/reference/NeuroCog.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","text":"main interest determining well measures distinguished among groups whether variables distinguished schizophrenia schizoaffective groups. Neurocognitive function assessed using MATRICS Consensus Cognitive Battery (MCCB; Nuechterlein et al., 2008). MCCB consists 10 individually administered tests measure cognitive performance seven domains: speed processing, attention/vigilance, working memory, verbal learning, visual learning, reasoning problem solving, social cognition. clinical sample comprised 116 male female patients met following criteria: 1) diagnosis schizophrenia (n = 70) schizoaffective disorder (n = 46) confirmed Structured Clinical Interview DSM-IV-TR Axis Disorders; 2) outpatient status; 3) history free developmental learning disability; 4) age 18-65; 5) history free neurological endocrine disorder; 6) concurrent DSM-IV-TR diagnosis substance use disorder. Non-psychiatric control participants (n = 146) screened medical psychiatric illness history substance abuse. Patients recruited three outpatient clinics Hamilton, Ontario, Canada. Control participants recruited local newspaper online classified advertisements paid research participation.","code":""},{"path":"https://friendly.github.io/heplots/reference/NeuroCog.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","text":"Heinrichs, R. W., Ammari, N., McDermid Vaz, S. & Miles, . (2008). schizophrenia schizoaffective disorder neuropsychologically distinguishable? Schizophrenia Research, 99, 149-154. Nuechterlein K.H., Green M.F., Kern R.S., Baade L.E., Barch D., Cohen J., Essock S., Fenton W.S., Frese F.J., Gold J.M., Goldberg T., Heaton R., Keefe R.S.E., Kraemer H., Mesholam-Gately R., Seidman L.J., Stover E., Weinberger D.R., Young .S., Zalcman S., Marder S.R. (2008) MATRICS Consensus Cognitive Battery, Part 1: Test selection, reliability, validity. American Journal Psychiatry, 165 (2), 203-213. https://pubmed.ncbi.nlm.nih.gov/18172019/.","code":""},{"path":"https://friendly.github.io/heplots/reference/NeuroCog.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","text":"","code":"library(car) data(NeuroCog) NC.mlm <- lm(cbind( Speed, Attention, Memory, Verbal, Visual, ProbSolv) ~ Dx, data=NeuroCog) Anova(NC.mlm) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Dx 2 0.2992 6.8902 12 470 1.562e-11 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test contrasts contrasts(NeuroCog$Dx) #> [,1] [,2] #> Schizophrenia -0.5 1 #> Schizoaffective -0.5 -1 #> Control 1.0 0 print(linearHypothesis(NC.mlm, \"Dx1\"), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.2890821 15.85866 6 234 2.8146e-15 *** #> Wilks 1 0.7109179 15.85866 6 234 2.8146e-15 *** #> Hotelling-Lawley 1 0.4066322 15.85866 6 234 2.8146e-15 *** #> Roy 1 0.4066322 15.85866 6 234 2.8146e-15 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 print(linearHypothesis(NC.mlm, \"Dx2\"), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.0063518 0.2493025 6 234 0.95924 #> Wilks 1 0.9936482 0.2493025 6 234 0.95924 #> Hotelling-Lawley 1 0.0063924 0.2493025 6 234 0.95924 #> Roy 1 0.0063924 0.2493025 6 234 0.95924 # pairwise HE plots pairs(NC.mlm, var.cex=1.5) # canonical discriminant analysis if (require(candisc)) { NC.can <- candisc(NC.mlm) NC.can plot(NC.can, ellipse=TRUE, rev.axes=c(TRUE,FALSE), pch=c(7,9,10)) } #> Vector scale factor set to 4.128"},{"path":"https://friendly.github.io/heplots/reference/NLSY.html","id":null,"dir":"Reference","previous_headings":"","what":"National Longitudinal Survey of Youth Data — NLSY","title":"National Longitudinal Survey of Youth Data — NLSY","text":"dataset come small random sample U.S. National Longitudinal Survey Youth.","code":""},{"path":"https://friendly.github.io/heplots/reference/NLSY.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"National Longitudinal Survey of Youth Data — NLSY","text":"data frame 243 observations following 6 variables. math Math achievement test score read Reading achievement test score antisoc score measure child's antisocial behavior, 0:6 hyperact score measure child's hyperactive behavior, 0:5 income yearly income child's father educ years education child's father","code":""},{"path":"https://friendly.github.io/heplots/reference/NLSY.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"National Longitudinal Survey of Youth Data — NLSY","text":"dataset derived larger one used Patrick Curran 1997 meeting Society Research Child Development (SRCD). description now exists WayBack Machine, http://web.archive.org/web/20050404145001/http://www.unc.edu/~curran/example.html. details available http://web.archive.org/web/20060830061414/http://www.unc.edu/~curran/srcd-docs/srcdmeth.pdf.","code":""},{"path":"https://friendly.github.io/heplots/reference/NLSY.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"National Longitudinal Survey of Youth Data — NLSY","text":"dataset, math read scores taken outcome variables. Among remaining predictors, income educ might considered background variables necessary control . Interest might focused whether behavioural variables antisoc hyperact contribute beyond .","code":""},{"path":"https://friendly.github.io/heplots/reference/NLSY.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"National Longitudinal Survey of Youth Data — NLSY","text":"","code":"library(car) data(NLSY) #examine the data scatterplotMatrix(NLSY, smooth=FALSE) # test control variables by themselves # ------------------------------------- mod1 <- lm(cbind(read,math) ~ income+educ, data=NLSY) Anova(mod1) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> income 1 0.034469 4.2661 2 239 0.015121 * #> educ 1 0.051521 6.4912 2 239 0.001798 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(mod1, fill=TRUE) # test of overall regression coefs <- rownames(coef(mod1))[-1] linearHypothesis(mod1, coefs) #> #> Sum of squares and products for the hypothesis: #> read math #> read 859.6586 1474.716 #> math 1474.7164 2929.558 #> #> Sum of squares and products for error: #> read math #> read 22882.46 12051.69 #> math 12051.69 23763.79 #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 0.1166962 7.435629 4 480 8.1261e-06 *** #> Wilks 2 0.8840660 7.594147 4 478 6.1527e-06 *** #> Hotelling-Lawley 2 0.1302750 7.751361 4 476 4.6699e-06 *** #> Roy 2 0.1232808 14.793699 2 240 8.7377e-07 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(mod1, fill=TRUE, hypotheses=list(\"Overall\"=coefs)) # additional contribution of antisoc + hyperact over income + educ # ---------------------------------------------------------------- mod2 <- lm(cbind(read,math) ~ antisoc + hyperact + income + educ, data=NLSY) Anova(mod2) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> antisoc 1 0.019343 2.3374 2 237 0.098803 . #> hyperact 1 0.014442 1.7364 2 237 0.178380 #> income 1 0.038280 4.7167 2 237 0.009801 ** #> educ 1 0.053152 6.6521 2 237 0.001546 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 coefs <- rownames(coef(mod2))[-1] heplot(mod2, fill=TRUE, hypotheses=list(\"Overall\"=coefs, \"mod2|mod1\"=coefs[1:2])) linearHypothesis(mod2, coefs[1:2]) #> #> Sum of squares and products for the hypothesis: #> read math #> read 170.3478 261.2230 #> math 261.2230 516.0188 #> #> Sum of squares and products for error: #> read math #> read 22712.12 11790.46 #> math 11790.46 23247.77 #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 0.0239869 1.444548 4 476 0.218172 #> Wilks 2 0.9760624 1.444284 4 474 0.218264 #> Hotelling-Lawley 2 0.0244741 1.443972 4 472 0.218372 #> Roy 2 0.0221965 2.641385 2 238 0.073351 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(mod2, fill=TRUE, hypotheses=list(\"mod2|mod1\"=coefs[1:2]))"},{"path":"https://friendly.github.io/heplots/reference/Oslo.html","id":null,"dir":"Reference","previous_headings":"","what":"Oslo Transect Subset Data — Oslo","title":"Oslo Transect Subset Data — Oslo","text":"Oslo data set contains chemical concentrations 332 samples different plant species collected along 120 km transect running city Oslo, Norway. subset OsloTransect data provided rrcov package.","code":""},{"path":"https://friendly.github.io/heplots/reference/Oslo.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Oslo Transect Subset Data — Oslo","text":"data frame 332 observations following 14 variables. site transect site ID, factor levels 102 103 104 105 106 107 108 109 111 112 113 114 115 116 117 118 119 121 122 123 124 125 126 127 128 129 131 132 133 134 135 136 138 139 141 142 143 144 XC X coordinate, numeric vector YC Y coordinate, numeric vector forest forest type, factor levels birspr mixdec pine sprbir sprpin spruce weather weather type, factor levels cloud moist nice rain litho lithological type, factor levels camsed (Cambro-Silurian sedimentary), gneis_o (Precambrian gneisses - Oslo), gneis_r (- Randsfjord), magm (Magmatic rocks) altitude altitude, numeric vector Cu Copper, numeric vector Fe Iron, numeric vector K Potassium, numeric vector Mg Magnesium, numeric vector Mn Manganese, numeric vector P Lead, numeric vector Zn Zinc, numeric vector","code":""},{"path":"https://friendly.github.io/heplots/reference/Oslo.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Oslo Transect Subset Data — Oslo","text":"Reimann, C., Arnoldussen, ., Boyd, R., Finne, T.E., Koller, F., Nordgulen, Oe., Englmaier, P. (2007) Element contents leaves four plant species (birch, mountain ash, fern spruce) along anthropogenic geogenic concentration gradients, Science Total Environment, 377, 416-433.","code":""},{"path":"https://friendly.github.io/heplots/reference/Oslo.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Oslo Transect Subset Data — Oslo","text":"OsloTransect contains 360 observations, 9 observations per site. 7 chemical elements retained 25 contained OsloTransect data, log-transformed, following Todorov Filzmoser (2009). complete cases variables retained, two lithological types low frequency removed, leaving 332 observations.","code":""},{"path":"https://friendly.github.io/heplots/reference/Oslo.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Oslo Transect Subset Data — Oslo","text":"Todorov V. Filzmoser P. (2009) Robust statistic one-way MANOVA, submitted Journal Environmetrics.","code":""},{"path":"https://friendly.github.io/heplots/reference/Oslo.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Oslo Transect Subset Data — Oslo","text":"","code":"data(Oslo) table(Oslo$litho) #> #> camsed gneis_o gneis_r magm #> 98 89 32 113 Oslo.mod <- lm(cbind(Cu, K, Mg, Mn, P, Zn) ~ litho, data=Oslo) car::Anova(Oslo.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> litho 3 0.24655 4.8503 18 975 1.503e-10 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(Oslo.mod, var=c(\"Cu\", \"Mn\")) pairs(Oslo.mod) if (FALSE) { if(require(candisc)) { Oslo.can <- candisc(Oslo.mod) Oslo.can heplot(Oslo.can) if(requireNamespace(\"rgl\")){ heplot3d(Oslo.can, shade=TRUE, wire=FALSE, alpha=0.5, var.col=\"red\") } } }"},{"path":"https://friendly.github.io/heplots/reference/pairs.mlm.html","id":null,"dir":"Reference","previous_headings":"","what":"Pairwise HE Plots — pairs.mlm","title":"Pairwise HE Plots — pairs.mlm","text":"function (form mlm method generic pairs function) constructs ``matrix'' pairwise plots (see heplot) multivariate linear model.","code":""},{"path":"https://friendly.github.io/heplots/reference/pairs.mlm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pairwise HE Plots — pairs.mlm","text":"","code":"# S3 method for mlm pairs( x, variables, var.labels, var.cex = 2, type = c(\"II\", \"III\", \"2\", \"3\"), idata = NULL, idesign = NULL, icontrasts = NULL, imatrix = NULL, iterm = NULL, manova, offset.axes = 0.05, digits = getOption(\"digits\") - 1, fill = FALSE, fill.alpha = 0.3, ... )"},{"path":"https://friendly.github.io/heplots/reference/pairs.mlm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Pairwise HE Plots — pairs.mlm","text":"x object class mlm. variables indices names three response variables plotted; defaults responses. var.labels labels variables plotted diagonal panels; defaults names response variables. var.cex character expansion variable labels. type type sum--squares--products matrices compute; one \"II\", \"III\", \"2\", \"3\", \"II\" default (\"2\" synonym). idata optional data frame giving factor factors defining intra-subject model multivariate repeated-measures data. See Details Anova explanation intra-subject design explanation arguments relating intra-subject factors. idesign one-sided model formula using ``data'' idata specifying intra-subject design repeated measure models. icontrasts names contrast-generating functions applied default factors ordered factors, respectively, within-subject ``data''; contrasts must produce intra-subject model matrix different terms orthogonal. default c(\"contr.sum\", \"contr.poly\"). imatrix lieu idata idesign, can specify intra-subject design matrix directly via imatrix, form list named elements. element gives columns within-subject model matrix intra-subject term tested, must many rows responses; columns within-subject model matrix different terms must mutually orthogonal. iterm repeated measures designs, must specify one intra-subject term (character string) select SSPE (E) matrix used plot. Hypothesis terms plotted include iterm effect well interactions iterm terms. manova optional Anova.mlm object model; absent MANOVA computed. Specifying argument can therefore save computation repeated calls. offset.axes proportion extend axes direction; defaults 0.05. digits number significant digits axis end-labels; taken \"digits\" option. fill logical vector indicating whether ellipse filled . first value used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single fill value can given. Defaults FALSE backward compatibility. See Details heplot fill.alpha Alpha transparency filled ellipses, numeric scalar vector values within [0,1], 0 means fully transparent 1 means fully opaque. Defaults 0.3. ... arguments pass heplot, used draw panel display.","code":""},{"path":"https://friendly.github.io/heplots/reference/pairs.mlm.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Pairwise HE Plots — pairs.mlm","text":"Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples Journal Statistical Software, 17(6), 1-42. https://www.jstatsoft.org/v17/i06/ Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421-444. http://datavis.ca/papers/jcgs-heplots.pdf","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/pairs.mlm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Pairwise HE Plots — pairs.mlm","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/pairs.mlm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Pairwise HE Plots — pairs.mlm","text":"","code":"# ANCOVA, assuming equal slopes rohwer.mod <- lm(cbind(SAT, PPVT, Raven) ~ SES + n + s + ns + na + ss, data=Rohwer) # View all pairs, with ellipse for all 5 regressors pairs(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\")))"},{"path":"https://friendly.github.io/heplots/reference/Parenting.html","id":null,"dir":"Reference","previous_headings":"","what":"Father Parenting Competence — Parenting","title":"Father Parenting Competence — Parenting","text":"data, exercise given Meyers et al. (2006) relates 60 fathers assessed three subscales Perceived Parenting Competence Scale. fathers selected three groups: () fathers child disabilities; (b) fathers physically disabled child; (c) fathers mentally disabled child.","code":""},{"path":"https://friendly.github.io/heplots/reference/Parenting.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Father Parenting Competence — Parenting","text":"data frame 60 observations following 4 variables. group factor levels Normal Physical Disability Mental Disability caring caretaking responsibilities, numeric vector emotion emotional support provided child, numeric vector play recreational time spent child, numeric vector","code":""},{"path":"https://friendly.github.io/heplots/reference/Parenting.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Father Parenting Competence — Parenting","text":"Meyers, L. S., Gamst, G, & Guarino, . J. (2006). Applied Multivariate Research: Design Interpretation, Thousand Oaks, CA: Sage Publications, https://studysites.sagepub.com/amrStudy/, Exercises 10B.","code":""},{"path":"https://friendly.github.io/heplots/reference/Parenting.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Father Parenting Competence — Parenting","text":"scores response variables discrete.","code":""},{"path":"https://friendly.github.io/heplots/reference/Parenting.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Father Parenting Competence — Parenting","text":"","code":"data(Parenting) require(car) # fit the MLM parenting.mod <- lm(cbind(caring, emotion, play) ~ group, data=Parenting) car::Anova(parenting.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> group 2 0.94836 16.833 6 112 8.994e-14 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # Box's M test boxM(parenting.mod) #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: Y #> Chi-Sq (approx.) = 28.343, df = 12, p-value = 0.004927 #> plot(boxM(parenting.mod)) parenting.mod <- lm(cbind(caring, emotion, play) ~ group, data=Parenting) car::Anova(parenting.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> group 2 0.94836 16.833 6 112 8.994e-14 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test contrasts print(linearHypothesis(parenting.mod, \"group1\"), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.5210364 19.94376 3 55 7.1051e-09 *** #> Wilks 1 0.4789636 19.94376 3 55 7.1051e-09 *** #> Hotelling-Lawley 1 1.0878413 19.94376 3 55 7.1051e-09 *** #> Roy 1 1.0878413 19.94376 3 55 7.1051e-09 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 print(linearHypothesis(parenting.mod, \"group2\"), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.4293815 13.79555 3 55 8.0113e-07 *** #> Wilks 1 0.5706185 13.79555 3 55 8.0113e-07 *** #> Hotelling-Lawley 1 0.7524844 13.79555 3 55 8.0113e-07 *** #> Roy 1 0.7524844 13.79555 3 55 8.0113e-07 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(parenting.mod) # display tests of contrasts hyp <- list(\"N:MP\" = \"group1\", \"M:P\" = \"group2\") heplot(parenting.mod, hypotheses=hyp) # make a prettier plot heplot(parenting.mod, hypotheses=hyp, asp=1, fill=TRUE, fill.alpha=c(0.3,0.1), col=c(\"red\", \"blue\"), lty=c(0,0,1,1), label.pos=c(1,1,3,2), cex=1.4, cex.lab=1.4, lwd=3) pairs(parenting.mod, fill=TRUE, fill.alpha=c(0.3, 0.1)) if (FALSE) { heplot3d(parenting.mod, wire=FALSE) }"},{"path":"https://friendly.github.io/heplots/reference/peng.html","id":null,"dir":"Reference","previous_headings":"","what":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","title":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","text":"Data originally palmerpenguins. Includes measurements penguin species, island Palmer Archipelago, size (flipper length, body mass, bill dimensions), sex.","code":""},{"path":"https://friendly.github.io/heplots/reference/peng.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","text":"","code":"peng"},{"path":"https://friendly.github.io/heplots/reference/peng.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","text":"tibble 333 rows 8 variables: species factor denoting penguin species (\"Adélie\", \"Chinstrap\" \"Gentoo\") island factor denoting island Palmer Archipelago, Antarctica (\"Biscoe\", \"Dream\" \"Torgersen\") bill_length number denoting bill length (millimeters) bill_depth number denoting bill depth (millimeters) flipper_length integer denoting flipper length (millimeters) body_mass integer denoting body mass (grams) sex factor denoting penguin sex (\"f\", \"m\") year integer denoting study year (2007, 2008, 2009)","code":""},{"path":"https://friendly.github.io/heplots/reference/peng.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","text":"Adélie penguins: Palmer Station Antarctica LTER K. Gorman. 2020. Structural size measurements isotopic signatures foraging among adult male female Adélie penguins (Pygoscelis adeliae) nesting along Palmer Archipelago near Palmer Station, 2007-2009 ver 5. Environmental Data Initiative doi:10.6073/pasta/98b16d7d563f265cb52372c8ca99e60f Gentoo penguins: Palmer Station Antarctica LTER K. Gorman. 2020. Structural size measurements isotopic signatures foraging among adult male female Gentoo penguin (Pygoscelis papua) nesting along Palmer Archipelago near Palmer Station, 2007-2009 ver 5. Environmental Data Initiative doi:10.6073/pasta/7fca67fb28d56ee2ffa3d9370ebda689 Chinstrap penguins: Palmer Station Antarctica LTER K. Gorman. 2020. Structural size measurements isotopic signatures foraging among adult male female Chinstrap penguin (Pygoscelis antarcticus) nesting along Palmer Archipelago near Palmer Station, 2007-2009 ver 6. Environmental Data Initiative doi:10.6073/pasta/c14dfcfada8ea13a17536e73eb6fbe9e Originally published : Gorman KB, Williams TD, Fraser WR (2014) Ecological Sexual Dimorphism Environmental Variability within Community Antarctic Penguins (Genus Pygoscelis). PLoS ONE 9(3): e90081. doi:10.1371/journal.pone.0090081","code":""},{"path":"https://friendly.github.io/heplots/reference/peng.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","text":"version, variable names shortened (removing units) observations missing data removed.","code":""},{"path":"https://friendly.github.io/heplots/reference/peng.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","text":"","code":"data(peng) # Covariance ellipses, centered, first two variables covEllipses(cbind(bill_length, bill_depth) ~ species, data=peng, center=TRUE, fill=c(rep(FALSE,3), TRUE), fill.alpha=.1, label.pos=c(1:3,0)) # All pairs when more than two variables are specified. They look pretty similar covEllipses(peng[,3:6], peng$species, variables=1:4, fill=c(rep(FALSE,3), TRUE), fill.alpha=.1) # Box's M test peng.boxm <- boxM(cbind(bill_length, bill_depth, flipper_length, body_mass) ~ species, data=peng) peng.boxm #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: Y #> Chi-Sq (approx.) = 74.731, df = 20, p-value = 3.02e-08 #> plot(peng.boxm, gplabel=\"Species\") # Fit MANOVA model, predicting species peng.mod0 <-lm(cbind(bill_length, bill_depth, flipper_length, body_mass) ~ species, data=peng) car::Anova(peng.mod0) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> species 2 1.6379 370.89 8 656 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # HE plot heplot(peng.mod0, fill=TRUE, fill.alpha=0.1, size=\"effect\", xlim=c(35,52), ylim=c(14,20))"},{"path":"https://friendly.github.io/heplots/reference/Plastic.html","id":null,"dir":"Reference","previous_headings":"","what":"Plastic Film Data — Plastic","title":"Plastic Film Data — Plastic","text":"experiment conducted determine optimum conditions extruding plastic film. Three responses measured relation two factors, rate extrusion amount additive.","code":""},{"path":"https://friendly.github.io/heplots/reference/Plastic.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Plastic Film Data — Plastic","text":"data frame 20 observations following 5 variables. tear numeric vector: tear resistance gloss numeric vector: film gloss opacity numeric vector: film opacity rate factor representing change rate extrusion levels Low (-10%), High (10%) additive factor levels Low (1.0%), High (1.5%)","code":""},{"path":"https://friendly.github.io/heplots/reference/Plastic.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Plastic Film Data — Plastic","text":"Johnson, R.. & Wichern, D.W. (1992). Applied Multivariate Statistical Analysis, 3rd ed., Prentice-Hall. Example 6.12 (p. 266).","code":""},{"path":"https://friendly.github.io/heplots/reference/Plastic.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plastic Film Data — Plastic","text":"Krzanowski, W. J. (1988). Principles Multivariate Analysis. User's Perspective. Oxford. (p. 381)","code":""},{"path":"https://friendly.github.io/heplots/reference/Plastic.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plastic Film Data — Plastic","text":"","code":"str(Plastic) #> 'data.frame':\t20 obs. of 5 variables: #> $ tear : num 6.5 6.2 5.8 6.5 6.5 6.9 7.2 6.9 6.1 6.3 ... #> $ gloss : num 9.5 9.9 9.6 9.6 9.2 9.1 10 9.9 9.5 9.4 ... #> $ opacity : num 4.4 6.4 3 4.1 0.8 5.7 2 3.9 1.9 5.7 ... #> $ rate : Factor w/ 2 levels \"Low\",\"High\": 1 1 1 1 1 1 1 1 1 1 ... #> $ additive: Factor w/ 2 levels \"Low\",\"High\": 1 1 1 1 1 2 2 2 2 2 ... plastic.mod <- lm(cbind(tear, gloss, opacity) ~ rate*additive, data=Plastic) car::Anova(plastic.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> rate 1 0.61814 7.5543 3 14 0.003034 ** #> additive 1 0.47697 4.2556 3 14 0.024745 * #> rate:additive 1 0.22289 1.3385 3 14 0.301782 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 pairs(plastic.mod)"},{"path":"https://friendly.github.io/heplots/reference/plot.boxM.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot for Box's M test and generalizations — plot.boxM","title":"Plot for Box's M test and generalizations — plot.boxM","text":"function creates simple dot chart showing contributions (log determinants) various groups Box's M test equality covariance matrices. important virtue plots can show groups differ , pooled covariance matrix using scalar like \\(ln | S |\\). way, can suggest specific questions hypotheses regarding equality covariance matrices, analogous use contrasts linear hypotheses testing differences among group mean vectors. Box's M test based specific function (log determinant) covariance matrices groups compared pooled covariance matrix, function also also allow plots measures based eigenvalues covariance matrices. Confidence intervals available default Box M test, using =\"logDet\".","code":""},{"path":"https://friendly.github.io/heplots/reference/plot.boxM.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot for Box's M test and generalizations — plot.boxM","text":"","code":"# S3 method for boxM plot( x, gplabel = NULL, which = c(\"logDet\", \"product\", \"sum\", \"precision\", \"max\"), log = which == \"product\", pch = c(16, 15), cex = c(2, 2.5), col = c(\"blue\", \"red\"), rev = FALSE, xlim, conf = 0.95, method = 1, bias.adj = TRUE, lwd = 2, ... )"},{"path":"https://friendly.github.io/heplots/reference/plot.boxM.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot for Box's M test and generalizations — plot.boxM","text":"x \"boxM\" object resulting boxM gplabel character string used label group factor. Measure plotted. default, \"logDet\", standard plot. values : \"product\", \"sum\", \"precision\" \"max\" log logical; TRUE, log measure plotted. default, ==\"product\", produces plot equivalent plot \"logDet\". pch vector two point symbols use individual groups pooled data, respectively cex character size point symbols, vector length two groups pooled data, respectively col colors point symbols, vector length two groups pooled data rev logical; TRUE, order groups reversed vertical axis. xlim x limits plot conf coverage approximate confidence intervals, 0 <= conf < 1 ; use conf=0 suppress method confidence interval method; see logdetCI bias.adj confidence interval bias adjustment; see logdetCI lwd line width confidence interval ... Arguments passed dotchart.","code":""},{"path":"https://friendly.github.io/heplots/reference/plot.boxM.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot for Box's M test and generalizations — plot.boxM","text":"Friendly, M., & Sigal, M. (2018). Visualizing Tests Equality Covariance Matrices. American Statistician, 72(4); doi:10.1080/00031305.2018.1497537 . Online: https://www.datavis.ca/papers/EqCov-TAS.pdf.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/plot.boxM.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot for Box's M test and generalizations — plot.boxM","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/plot.boxM.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot for Box's M test and generalizations — plot.boxM","text":"","code":"# Iris data res <- boxM(iris[, 1:4], iris[, \"Species\"]) plot(res, gplabel=\"Species\") # Skulls data skulls.mod <- lm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) skulls.boxm <- boxM(skulls.mod) plot(skulls.boxm, gplabel=\"Epoch\") plot(skulls.boxm, gplabel=\"Epoch\", bias.adj=FALSE) # other measures plot(skulls.boxm, which=\"product\", gplabel=\"Epoch\", xlim=c(10,14)) plot(skulls.boxm, which=\"sum\", gplabel=\"Epoch\") plot(skulls.boxm, which=\"precision\", gplabel=\"Epoch\") plot(skulls.boxm, which=\"max\", gplabel=\"Epoch\")"},{"path":"https://friendly.github.io/heplots/reference/plot.robmlm.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot observation weights from a robust multivariate linear models — plot.robmlm","title":"Plot observation weights from a robust multivariate linear models — plot.robmlm","text":"Creates index plot observation weights assigned last iteration robmlm. Observations low weights large residual squared distances potential multivariate outliers respect fitted model.","code":""},{"path":"https://friendly.github.io/heplots/reference/plot.robmlm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot observation weights from a robust multivariate linear models — plot.robmlm","text":"","code":"# S3 method for robmlm plot( x, labels, id.weight = 0.7, id.pos = 4, pch = 19, col = palette()[1], cex = par(\"cex\"), segments = FALSE, xlab = \"Case index\", ylab = \"Weight in robust MANOVA\", ... )"},{"path":"https://friendly.github.io/heplots/reference/plot.robmlm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot observation weights from a robust multivariate linear models — plot.robmlm","text":"x \"robmlm\" object labels Observation labels; specified, uses rownames original data id.weight Threshold identifying observations small weights id.pos Position observation label relative point pch Point symbol(s); can vector length equal number observations data frame col Point color(s) cex Point character size(s) segments logical; TRUE, draw line segments 1.o point xlab x axis label ylab y axis label ... arguments passed plot","code":""},{"path":"https://friendly.github.io/heplots/reference/plot.robmlm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot observation weights from a robust multivariate linear models — plot.robmlm","text":"Returns invisibly weights observations labeled plot","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/plot.robmlm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot observation weights from a robust multivariate linear models — plot.robmlm","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/plot.robmlm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot observation weights from a robust multivariate linear models — plot.robmlm","text":"","code":"data(Skulls) sk.rmod <- robmlm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) plot(sk.rmod, col=Skulls$epoch) axis(side=3, at=15+seq(0,120,30), labels=levels(Skulls$epoch), cex.axis=1) # Pottery data data(Pottery, package = \"carData\") pottery.rmod <- robmlm(cbind(Al,Fe,Mg,Ca,Na)~Site, data=Pottery) plot(pottery.rmod, col=Pottery$Site, segments=TRUE) # SocialCog data data(SocialCog) SC.rmod <- robmlm(cbind( MgeEmotions, ToM, ExtBias, PersBias) ~ Dx, data=SocialCog) plot(SC.rmod, col=SocialCog$Dx, segments=TRUE)"},{"path":"https://friendly.github.io/heplots/reference/Pottery2.html","id":null,"dir":"Reference","previous_headings":"","what":"Chemical Analysis of Romano-British Pottery — Pottery2","title":"Chemical Analysis of Romano-British Pottery — Pottery2","text":"Results chemical analyses 48 specimens Romano-British pottery published Tubb et al. (1980). numbers percentage various metal oxides found sample elements concentrations greater 0.01%. original data set Tubb et al. (1980), contrast Pottery.","code":""},{"path":"https://friendly.github.io/heplots/reference/Pottery2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Chemical Analysis of Romano-British Pottery — Pottery2","text":"data frame 48 observations following 12 variables. Region factor levels Gl NF Wales Site factor levels AshleyRails Caldicot Gloucester IsleThorns Llanedryn Kiln factor levels 1 2 3 4 5 Al amount aluminum oxide, \\(Al_2O_3\\) Fe amount iron oxide, \\(Fe_2O_3\\) Mg amount magnesium oxide, MgO Ca amount calcium oxide, CaO Na amount sodium oxide, \\(Na_2O\\) K amount potassium oxide, \\(K_2O\\) Ti amount titanium oxide, \\(TiO_2\\) Mn amount manganese oxide, MnO Ba amount BaO","code":""},{"path":"https://friendly.github.io/heplots/reference/Pottery2.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Chemical Analysis of Romano-British Pottery — Pottery2","text":"Originally slightly modified files David Carlson, now RBPottery.","code":""},{"path":"https://friendly.github.io/heplots/reference/Pottery2.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Chemical Analysis of Romano-British Pottery — Pottery2","text":"specimens identified rownames data frame. Kiln indicates kiln site pottery found; Site gives location names sites. kiln sites come three Regions, (\"Gl\"=1, \"Wales\"=(2, 3), \"NF\"=(4, 5)), full names \"Gloucester\", \"Wales\", \"New Forrest\". variable Kiln comes pre-supplied contrasts test interesting hypotheses related Site Region.","code":""},{"path":"https://friendly.github.io/heplots/reference/Pottery2.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Chemical Analysis of Romano-British Pottery — Pottery2","text":"Baxter, M. J. 2003. Statistics Archaeology. Arnold, London. Carlson, David L. 2017. Quantitative Methods Archaeology Using R. Cambridge University Press, pp 247-255, 335-342. Tubb, ., . J. Parker, G. Nickless. 1980. Analysis Romano-British Pottery Atomic Absorption Spectrophotometry. Archaeometry, 22, 153-171.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/Pottery2.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Chemical Analysis of Romano-British Pottery — Pottery2","text":"","code":"library(car) data(Pottery2) # contrasts for Kiln correspond to between Region [,1:2] and within Region [,3:4] contrasts(Pottery2$Kiln) #> G.WN W.N W2.W3 NF4.NF5 #> 1 4 0 0 0 #> 2 -1 1 1 0 #> 3 -1 1 -1 0 #> 4 -1 -1 0 1 #> 5 -1 -1 0 -1 pmod <-lm(cbind(Al,Fe,Mg,Ca,Na,K,Ti,Mn,Ba)~Kiln, data=Pottery2) car::Anova(pmod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Kiln 4 2.2268 5.3025 36 152 1.391e-13 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # extract coefficient names for linearHypotheses coefs <- rownames(coef(pmod))[-1] # test differences among regions linearHypothesis(pmod, coefs[1:2]) #> #> Sum of squares and products for the hypothesis: #> Al Fe Mg Ca Na K #> Al 151.65057276 -40.53893273 -90.32962804 6.93651249 1.398166750 -49.20000025 #> Fe -40.53893273 233.23920836 52.50699833 35.47123205 11.719323014 45.78071096 #> Mg -90.32962804 52.50699833 57.42066307 0.62797642 0.709273843 33.46637847 #> Ca 6.93651249 35.47123205 0.62797642 6.58156100 2.093516673 3.22560998 #> Na 1.39816675 11.71932301 0.70927384 2.09351667 0.670448844 1.32056847 #> K -49.20000025 45.78071096 33.46637847 3.22560998 1.320568467 20.74890960 #> Ti 9.24314119 -5.42115551 -5.88182924 -0.07236204 -0.075203080 -3.43159076 #> Mn -2.43619545 2.85554855 1.73219182 0.25851436 0.097397909 1.11376927 #> Ba 0.03092721 0.04339183 -0.01183411 0.01008451 0.003094097 -0.00245479 #> Ti Mn Ba #> Al 9.243141192 -2.436195e+00 3.092721e-02 #> Fe -5.421155511 2.855549e+00 4.339183e-02 #> Mg -5.881829237 1.732192e+00 -1.183411e-02 #> Ca -0.072362038 2.585144e-01 1.008451e-02 #> Na -0.075203080 9.739791e-02 3.094097e-03 #> K -3.431590759 1.113769e+00 -2.454790e-03 #> Ti 0.602509224 -1.777282e-01 1.199732e-03 #> Mn -0.177728182 6.098404e-02 1.518182e-05 #> Ba 0.001199732 1.518182e-05 1.830653e-05 #> #> Sum of squares and products for error: #> Al Fe Mg Ca Na K #> Al 96.20132468 21.11225325 5.506287013 -2.096574026 0.569593506 10.55401948 #> Fe 21.11225325 19.88942753 2.157729870 -0.685039740 0.918994935 4.50978519 #> Mg 5.50628701 2.15772987 16.303520519 0.274558961 0.090970260 5.88807922 #> Ca -2.09657403 -0.68503974 0.274558961 1.760672078 -0.025830519 0.24870156 #> Na 0.56959351 0.91899494 0.090970260 -0.025830519 0.735820130 0.56027961 #> K 10.55401948 4.50978519 5.888079221 0.248701558 0.560279610 14.63247117 #> Ti 0.96768701 1.99152987 0.041040519 -0.120881039 0.062710260 0.32167922 #> Mn 0.37119545 0.26490145 -0.131911818 0.009635636 0.059562091 0.10489073 #> Ba 0.07495727 0.02567727 -0.007025091 0.004785182 0.004963455 0.01005364 #> Ti Mn Ba #> Al 0.967687013 0.371195455 0.0749572727 #> Fe 1.991529870 0.264901455 0.0256772727 #> Mg 0.041040519 -0.131911818 -0.0070250909 #> Ca -0.120881039 0.009635636 0.0047851818 #> Na 0.062710260 0.059562091 0.0049634545 #> K 0.321679221 0.104890727 0.0100536364 #> Ti 1.368520519 0.015238182 0.0037669091 #> Mn 0.015238182 0.089093964 0.0030718182 #> Ba 0.003766909 0.003071818 0.0004249909 #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 1.86181 53.88966 18 72 < 2.22e-16 *** #> Wilks 2 0.00383 58.97836 18 70 < 2.22e-16 *** #> Hotelling-Lawley 2 34.11493 64.43932 18 68 < 2.22e-16 *** #> Roy 2 25.10339 100.41357 9 36 < 2.22e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test differences within regions B, C linearHypothesis(pmod, coefs[3:4]) #> #> Sum of squares and products for the hypothesis: #> Al Fe Mg Ca Na K #> Al 3.1562321 1.8776786 1.6154857 -0.19634643 0.31648036 -0.74230357 #> Fe 1.8776786 1.7032143 1.6611429 -0.16853571 0.33919643 -1.02896429 #> Mg 1.6154857 1.6611429 1.6629886 -0.16227714 0.34223429 -1.08144286 #> Ca -0.1963464 -0.1685357 -0.1622771 0.01677929 -0.03300607 0.09801071 #> Na 0.3164804 0.3391964 0.3422343 -0.03300607 0.07059089 -0.22565893 #> K -0.7423036 -1.0289643 -1.0814429 0.09801071 -0.22565893 0.76313929 #> Ti 0.3105857 0.2461429 0.2322686 -0.02473714 0.04694429 -0.13454286 #> Mn 0.0667875 0.0777250 0.0795600 -0.00750750 0.01647875 -0.05377750 #> Ba 0.0062575 0.0054250 0.0052360 -0.00053950 0.00106575 -0.00317750 #> Ti Mn Ba #> Al 0.31058571 0.06678750 0.00625750 #> Fe 0.24614286 0.07772500 0.00542500 #> Mg 0.23226857 0.07956000 0.00523600 #> Ca -0.02473714 -0.00750750 -0.00053950 #> Na 0.04694429 0.01647875 0.00106575 #> K -0.13454286 -0.05377750 -0.00317750 #> Ti 0.03698857 0.01055000 0.00079400 #> Mn 0.01055000 0.00387575 0.00024275 #> Ba 0.00079400 0.00024275 0.00001735 #> #> Sum of squares and products for error: #> Al Fe Mg Ca Na K #> Al 96.20132468 21.11225325 5.506287013 -2.096574026 0.569593506 10.55401948 #> Fe 21.11225325 19.88942753 2.157729870 -0.685039740 0.918994935 4.50978519 #> Mg 5.50628701 2.15772987 16.303520519 0.274558961 0.090970260 5.88807922 #> Ca -2.09657403 -0.68503974 0.274558961 1.760672078 -0.025830519 0.24870156 #> Na 0.56959351 0.91899494 0.090970260 -0.025830519 0.735820130 0.56027961 #> K 10.55401948 4.50978519 5.888079221 0.248701558 0.560279610 14.63247117 #> Ti 0.96768701 1.99152987 0.041040519 -0.120881039 0.062710260 0.32167922 #> Mn 0.37119545 0.26490145 -0.131911818 0.009635636 0.059562091 0.10489073 #> Ba 0.07495727 0.02567727 -0.007025091 0.004785182 0.004963455 0.01005364 #> Ti Mn Ba #> Al 0.967687013 0.371195455 0.0749572727 #> Fe 1.991529870 0.264901455 0.0256772727 #> Mg 0.041040519 -0.131911818 -0.0070250909 #> Ca -0.120881039 0.009635636 0.0047851818 #> Na 0.062710260 0.059562091 0.0049634545 #> K 0.321679221 0.104890727 0.0100536364 #> Ti 1.368520519 0.015238182 0.0037669091 #> Mn 0.015238182 0.089093964 0.0030718182 #> Ba 0.003766909 0.003071818 0.0004249909 #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 0.3584150 0.8733388 18 72 0.610701 #> Wilks 2 0.6493732 0.9370114 18 70 0.538962 #> Hotelling-Lawley 2 0.5279530 0.9972445 18 68 0.473824 #> Roy 2 0.5041642 2.0166569 9 36 0.065976 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(pmod, fill=c(TRUE,FALSE), hypotheses=list(\"Region\" =coefs[1:2], \"WithinBC\"=coefs[3:4])) # all pairwise views; note that Ba shows no effect pairs(pmod, fill=c(TRUE,FALSE)) # canonical view, via candisc::heplot if (require(candisc)) { # canonical analysis: how many dimensions? (pcan <- candisc(pmod)) heplot(pcan, scale=18, fill=c(TRUE,FALSE), var.col=\"darkgreen\", var.lwd=2, var.cex=1.5) if (FALSE) { heplot3d(pcan, scale=8) } }"},{"path":"https://friendly.github.io/heplots/reference/Probe.html","id":null,"dir":"Reference","previous_headings":"","what":"Response Speed in a Probe Experiment — Probe","title":"Response Speed in a Probe Experiment — Probe","text":"Data probe experiment testing whether immediate memory sentences influenced phrase structure sentence. data sets come Timm (1975), Ex. 3.14 Ex. 3.16 (p.244)","code":""},{"path":"https://friendly.github.io/heplots/reference/Probe.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Response Speed in a Probe Experiment — Probe","text":"Probe1: data frame 11 observations following 5 variables. p1 speed position 1 p2 speed position 2 p3 speed position 3 p4 speed position 4 p5 speed position 5 Probe2: data frame 20 observations following 6 variables. stm Short term memory capacity: factor levels High Low p1 speed position 1 p2 speed position 2 p3 speed position 3 p4 speed position 4 p5 speed position 5","code":""},{"path":"https://friendly.github.io/heplots/reference/Probe.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Response Speed in a Probe Experiment — Probe","text":"Timm, N. (1975) Multivariate analysis, applications education psychology Brooks/Cole.","code":""},{"path":"https://friendly.github.io/heplots/reference/Probe.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Response Speed in a Probe Experiment — Probe","text":"Procedure: Subjects listened tape-recorded sentences. sentence followed \"probe word\" one 5 positions within sentence. subject respond word immediately followed probe word sentence. dependent measure response speed = k(1/reaction time). Sample sentence: Probe2, two groups subjects, pre-selected test short term memory. data sets (fictitious) used examples single-sample two-sample profile analysis simple repeated measure designs structured contrasts.","code":"* The tall man met the young girl who got the new hat. Pos'ns: 1 2 3 4 5 Function: ADJ1 SUBJ ADJ2 OBJ REL.PN"},{"path":"https://friendly.github.io/heplots/reference/Probe.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Response Speed in a Probe Experiment — Probe","text":"","code":"data(Probe1) boxplot(Probe1) pmod1 <- lm(cbind(p1,p2,p3,p4,p5) ~ 1, data=Probe1) idata <- data.frame(position=factor(1:5)) library(car) (pmod1.aov <- car::Anova(pmod1, idata=idata, idesign=~position)) #> Note: model has only an intercept; equivalent type-III tests substituted. #> #> Type III Repeated Measures MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 0.96312 261.15 1 10 1.705e-08 *** #> position 1 0.75177 5.30 4 7 0.02767 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # using default contrasts (p5 as reference level) heplot(pmod1, manova=pmod1.aov, iterm=\"position\", type=\"III\", idata=idata, idesign=~position) pairs(pmod1, manova=pmod1.aov, iterm=\"position\", type=\"III\", idata=idata, idesign=~position) # contrasts for substantative hypotheses regarding # sentence position effects C <- matrix(c( 1, 1, -1, -1, 0, 1, -1, 1, -1, 0, 1, -1, -1, 1, 0, 1, 1, 1, 1, -4), 5, 4) rownames(C) <- paste(\"p\", 1:5, sep=\"\") colnames(C) <- c(\"SubPred\", \"AdjNoun\", \"SPxAN\", \"RelPN\") contrasts(idata$position)<- C (pmod1.aov <- car::Anova(pmod1, idata=idata, idesign=~position)) #> Note: model has only an intercept; equivalent type-III tests substituted. #> #> Type III Repeated Measures MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 0.96312 261.15 1 10 1.705e-08 *** #> position 1 0.75177 5.30 4 7 0.02767 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(pmod1, manova=pmod1.aov, iterm=\"position\", type=\"III\", idata=idata, idesign=~position) pairs(pmod1, manova=pmod1.aov, iterm=\"position\", type=\"III\", idata=idata, idesign=~position)"},{"path":"https://friendly.github.io/heplots/reference/RatWeight.html","id":null,"dir":"Reference","previous_headings":"","what":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","title":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","text":"data study weight gain, investigators randomly assigned 30 rats three treatment groups: treatment 1 control (additive); treatments 2 3 consisted two different additives (thiouracil thyroxin respectively) rats drinking water. Weight measured baseline (week 0) weeks 1, 2, 3, 4. Due accident beginning study, data 3 rats thyroxin group unavailable.","code":""},{"path":"https://friendly.github.io/heplots/reference/RatWeight.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","text":"data frame 27 observations following 6 variables. trt factor levels Control Thiouracil Thyroxin wt0 Weight Week 0 (baseline weight) wt1 Weight Week 1 wt2 Weight Week 2 wt3 Weight Week 3 wt4 Weight Week 4","code":""},{"path":"https://friendly.github.io/heplots/reference/RatWeight.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","text":"Originally Box (1950), Table D (page 389), values weeks 1-4 recorded gain weight week. Fitzmaurice, G. M. Laird, N. M. Ware, J. H (2004). Applied Longitudinal Analysis, New York, NY: Wiley-Interscience. https://rdrr.io/rforge/ALA/.","code":""},{"path":"https://friendly.github.io/heplots/reference/RatWeight.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","text":"trt factor comes supplied contrasts comparing Control Thiouracil Thyroxin.","code":""},{"path":"https://friendly.github.io/heplots/reference/RatWeight.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","text":"Box, G.E.P. (1950). Problems analysis growth wear curves. Biometrics, 6, 362-389. Friendly, Michael (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 .","code":""},{"path":"https://friendly.github.io/heplots/reference/RatWeight.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","text":"","code":"data(RatWeight) contrasts(RatWeight$trt) #> [,1] [,2] #> Control -1 -1 #> Thiouracil 1 0 #> Thyroxin 0 1 rat.mod <- lm(cbind(wt0, wt1, wt2, wt3, wt4) ~ trt, data=RatWeight) rat.mod #> #> Call: #> lm(formula = cbind(wt0, wt1, wt2, wt3, wt4) ~ trt, data = RatWeight) #> #> Coefficients: #> wt0 wt1 wt2 wt3 wt4 #> (Intercept) 54.75714 76.88571 102.21905 123.67143 149.15238 #> trt1 -0.05714 -0.58571 -6.41905 -15.47143 -25.15238 #> trt2 0.81429 -1.02857 2.63810 9.04286 13.70476 #> idata <- data.frame(week = ordered(0:4)) car::Anova(rat.mod, idata=idata, idesign=~week, test=\"Roy\") #> #> Type II Repeated Measures MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 140.617 3374.8 1 24 < 2.2e-16 *** #> trt 2 0.657 7.9 2 24 0.002334 ** #> week 1 56.188 295.0 4 21 < 2.2e-16 *** #> trt:week 2 1.979 10.9 4 22 5.059e-05 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # quick look at between group effects pairs(rat.mod) # between-S, baseline & week 4 heplot(rat.mod, col=c(\"red\", \"blue\", \"green3\", \"green3\"), variables=c(1,5), hypotheses=c(\"trt1\", \"trt2\"), main=\"Rat weight data, Between-S effects\") # within-S heplot(rat.mod, idata=idata, idesign=~week, iterm=\"week\", col=c(\"red\", \"blue\", \"green3\"), # hypotheses=c(\"trt1\", \"trt2\"), main=\"Rat weight data, Within-S effects\")"},{"path":"https://friendly.github.io/heplots/reference/ReactTime.html","id":null,"dir":"Reference","previous_headings":"","what":"Reaction Time Data — ReactTime","title":"Reaction Time Data — ReactTime","text":"Data Maxwell Delaney (1990, p. 497) representing reaction times 10 subjects task visual stimuli tilted 0, 4, 8 degrees; noise absent present. subject responded 3 tilt x 2 noise = 6 conditions. data thus comprise repeated measure design two within-S factors.","code":""},{"path":"https://friendly.github.io/heplots/reference/ReactTime.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Reaction Time Data — ReactTime","text":"data frame 10 observations giving reaction time 6 conditions. deg0NA numeric vector deg4NA numeric vector deg8NA numeric vector deg0NP numeric vector deg4NP numeric vector deg8NP numeric vector","code":""},{"path":"https://friendly.github.io/heplots/reference/ReactTime.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Reaction Time Data — ReactTime","text":"Baron, J. Li, Y. (2003). Notes use R psychology experiments questionnaires, https://cran.r-project.org/doc/contrib/Baron-rpsych.pdf","code":""},{"path":"https://friendly.github.io/heplots/reference/ReactTime.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Reaction Time Data — ReactTime","text":"Michael Friendly (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 . Maxwell, S. E. & Delaney, H. D. (1990). Designing Experiments Analyzing Data: model comparison perspective. Pacific Grove, CA: Brooks/Cole.","code":""},{"path":"https://friendly.github.io/heplots/reference/ReactTime.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Reaction Time Data — ReactTime","text":"","code":"data(ReactTime) (RT.mod <- lm(as.matrix(ReactTime)~1)) #> #> Call: #> lm(formula = as.matrix(ReactTime) ~ 1) #> #> Coefficients: #> deg0NA deg4NA deg8NA deg0NP deg4NP deg8NP #> (Intercept) 462 510 528 492 660 762 #> # within-S factors within <- expand.grid(tilt=ordered(c(0,4,8)), noise=c(\"NA\", \"NP\")) car::Anova(RT.mod, idata=within, idesign=~tilt * noise) #> Note: model has only an intercept; equivalent type-III tests substituted. #> #> Type III Repeated Measures MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 0.98518 598.45 1 9 1.527e-09 *** #> tilt 1 0.88760 31.59 2 8 0.0001596 *** #> noise 1 0.78955 33.77 1 9 0.0002560 *** #> tilt:noise 1 0.91822 44.91 2 8 4.472e-05 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(RT.mod, idata=within, idesign=~tilt * noise, iterm=\"tilt\") #> Note: model has only an intercept; equivalent type-III tests substituted. # plotting means and std errors directly levels <- expand.grid(Tilt=c(0,4,8), noise=c(\"NA\", \"NP\")) (means.df <- data.frame(levels, mean=colMeans(ReactTime), se=sqrt(diag(var(ReactTime)))/9)) #> Tilt noise mean se #> deg0NA 0 NA 462 6.324555 #> deg4NA 4 NA 510 9.558139 #> deg8NA 8 NA 528 8.777075 #> deg0NP 0 NP 492 9.838197 #> deg4NP 4 NP 660 12.171612 #> deg8NP 8 NP 762 12.976712 with(means.df, { plot(Tilt, mean, type=\"n\", main=\"Reaction Time data\", xlab=\"Tilt\", ylab=\"Reaction time\") colors <- rep(c(\"red\", \"blue\"), each=3) pts <- rep(c(15, 16), each=3) lines(Tilt[1:3], mean[1:3], col=\"red\", lwd=2) lines(Tilt[4:6], mean[4:6], col=\"blue\", lwd=2) points(Tilt, mean, pch=pts, col=colors, cex=1.2) arrows(Tilt, mean-se, Tilt, mean+se, angle=90, code=3, col=colors, len=.05, lwd=2) # labels at last point, in lieu of legend text(Tilt[3], mean[3]-10, labels=\"NA\", col=\"red\", pos=1) text(Tilt[6], mean[6]-10, labels=\"NP\", col=\"blue\", pos=1) } )"},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":null,"dir":"Reference","previous_headings":"","what":"Robust Fitting of Multivariate Linear Models — robmlm","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"Fit multivariate linear model robust regression using simple M estimator.","code":""},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"","code":"robmlm(X, ...) # S3 method for default robmlm( X, Y, w, P = 2 * pnorm(4.685, lower.tail = FALSE), tune, max.iter = 100, psi = psi.bisquare, tol = 1e-06, initialize, verbose = FALSE, ... ) # S3 method for formula robmlm( formula, data, subset, weights, na.action, model = TRUE, contrasts = NULL, ... ) # S3 method for robmlm print(x, ...) # S3 method for robmlm summary(object, ...) # S3 method for summary.robmlm print(x, ...)"},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"X default method, model matrix, including constant (present) ... arguments, passed . particular relevant control arguments can passed robmlm.default method. Y default method, response matrix w prior weights P two-tail probability, find cutoff quantile chisq (tuning constant); default set bisquare weight function tune tuning constant (given directly) max.iter maximum number iterations psi robustness weight function; psi.bisquare default tol convergence tolerance, maximum relative change coefficients initialize modeling function find start values coefficients, equation--equation; absent WLS (lm.wfit) used verbose show iteration history? (TRUE FALSE) formula formula form cbind(y1, y2, ...) ~ x1 + x2 + .... data data frame variables specified formula preferentially taken. subset index vector specifying cases used fitting. weights vector prior weights case. na.action function specify action taken NAs found. 'factory-fresh' default action R na.omit, can changed options(na.action=). model model frame returned object? contrasts optional contrast specifications; see lm details. x robmlm object object robmlm object","code":""},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"object class \"robmlm\" inheriting c(\"mlm\", \"lm\"). means returned \"robmlm\" contains components \"mlm\" objects described lm, plus following: weights final observation weights iterations number iterations converged logical: IWLS process converge? generic accessor functions coefficients, effects, fitted.values residuals extract various useful features value returned robmlm.","code":""},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"S3 methods designed provide specification class robust methods extend mlms, therefore compatible mlm extensions, including Anova heplot. Fitting done iterated re-weighted least squares (IWLS), using weights based Mahalanobis squared distances current residuals origin, scaling (covariance) matrix calculated cov.trob. design methods loosely modeled rlm. internal vcov.mlm function extension standard vcov method providing observation weights.","code":""},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":". Marazzi (1993) Algorithms, Routines S Functions Robust Statistics. Wadsworth & Brooks/Cole.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"John Fox; packaged Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"","code":"############## # Skulls data # make shorter labels for epochs and nicer variable labels in heplots Skulls$epoch <- factor(Skulls$epoch, labels=sub(\"c\",\"\",levels(Skulls$epoch))) # variable labels vlab <- c(\"maxBreadth\", \"basibHeight\", \"basialLength\", \"nasalHeight\") # fit manova model, classically and robustly sk.mod <- lm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) sk.rmod <- robmlm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) # standard mlm methods apply here coefficients(sk.rmod) #> mb bh bl nh #> (Intercept) 133.9539529 132.6656599 96.50561801 50.8900600 #> epoch.L 4.1659721 -2.1793681 -4.84240950 1.1168866 #> epoch.Q -0.3671411 -1.3069085 -0.04276618 0.2817763 #> epoch.C -0.5833713 -0.7912067 1.03002114 -0.8379419 #> epoch^4 0.6350148 0.8787857 -0.55919989 -0.6233314 # index plot of weights plot(sk.rmod$weights, type=\"h\", xlab=\"Case Index\", ylab=\"Robust mlm weight\", col=\"gray\") points(sk.rmod$weights, pch=16, col=Skulls$epoch) axis(side=1, at=15+seq(0,120,30), labels=levels(Skulls$epoch), tick=FALSE, cex.axis=1) # heplots to see effect of robmlm vs. mlm heplot(sk.mod, hypotheses=list(Lin=\"epoch.L\", Quad=\"epoch.Q\"), xlab=vlab[1], ylab=vlab[2], cex=1.25, lty=1) heplot(sk.rmod, hypotheses=list(Lin=\"epoch.L\", Quad=\"epoch.Q\"), add=TRUE, error.ellipse=TRUE, lwd=c(2,2), lty=c(2,2), term.labels=FALSE, hyp.labels=FALSE, err.label=\"\") ############## # Pottery data data(Pottery, package = \"carData\") pottery.mod <- lm(cbind(Al,Fe,Mg,Ca,Na)~Site, data=Pottery) pottery.rmod <- robmlm(cbind(Al,Fe,Mg,Ca,Na)~Site, data=Pottery) car::Anova(pottery.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Site 3 1.5539 4.2984 15 60 2.413e-05 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 car::Anova(pottery.rmod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Site 3 1.975 6.5516 15 51 1.722e-07 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # index plot of weights plot(pottery.rmod$weights, type=\"h\") points(pottery.rmod$weights, pch=16, col=Pottery$Site) # heplots to see effect of robmlm vs. mlm heplot(pottery.mod, cex=1.3, lty=1) heplot(pottery.rmod, add=TRUE, error.ellipse=TRUE, lwd=c(2,2), lty=c(2,2), term.labels=FALSE, err.label=\"\") ############### # Prestige data data(Prestige, package = \"carData\") # treat women and prestige as response variables for this example prestige.mod <- lm(cbind(women, prestige) ~ income + education + type, data=Prestige) prestige.rmod <- robmlm(cbind(women, prestige) ~ income + education + type, data=Prestige) coef(prestige.mod) #> women prestige #> (Intercept) 29.638865042 -0.622929165 #> income -0.004594789 0.001013193 #> education 1.677749298 3.673166052 #> typeprof 20.761455686 6.038970651 #> typewc 27.911084356 -2.737230718 coef(prestige.rmod) #> women prestige #> (Intercept) 24.696906731 0.019651597 #> income -0.004902077 0.001082214 #> education 2.352283991 3.549614674 #> typeprof 18.737098949 6.394466644 #> typewc 26.762870920 -2.570933052 # how much do coefficients change? round(coef(prestige.mod) - coef(prestige.rmod),3) #> women prestige #> (Intercept) 4.942 -0.643 #> income 0.000 0.000 #> education -0.675 0.124 #> typeprof 2.024 -0.355 #> typewc 1.148 -0.166 # pretty plot of case weights plot(prestige.rmod$weights, type=\"h\", xlab=\"Case Index\", ylab=\"Robust mlm weight\", col=\"gray\") points(prestige.rmod$weights, pch=16, col=Prestige$type) legend(0, 0.7, levels(Prestige$type), pch=16, col=palette()[1:3], bg=\"white\") heplot(prestige.mod, cex=1.4, lty=1) heplot(prestige.rmod, add=TRUE, error.ellipse=TRUE, lwd=c(2,2), lty=c(2,2), term.labels=FALSE, err.label=\"\")"},{"path":"https://friendly.github.io/heplots/reference/Rohwer.html","id":null,"dir":"Reference","previous_headings":"","what":"Rohwer Data Set — Rohwer","title":"Rohwer Data Set — Rohwer","text":"Data experiment William D. Rohwer kindergarten children designed examine well performance set paired-associate (PA) tasks can predict performance measures aptitude achievement.","code":""},{"path":"https://friendly.github.io/heplots/reference/Rohwer.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Rohwer Data Set — Rohwer","text":"data frame 69 observations following 10 variables. group numeric vector, corresponding SES SES Socioeconomic status, factor levels Hi Lo SAT numeric vector: score Student Achievement Test PPVT numeric vector: score Peabody Picture Vocabulary Test Raven numeric vector: score Raven Progressive Matrices Test n numeric vector: performance 'named' PA task s numeric vector: performance 'still' PA task ns numeric vector: performance 'named still' PA task na numeric vector: performance 'named action' PA task ss numeric vector: performance 'sentence still' PA task","code":""},{"path":"https://friendly.github.io/heplots/reference/Rohwer.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Rohwer Data Set — Rohwer","text":"Timm, N.H. 1975). Multivariate Analysis Applications Education Psychology. Wadsworth (Brooks/Cole), Examples 4.3 (p. 281), 4.7 (p. 313), 4.13 (p. 344).","code":""},{"path":"https://friendly.github.io/heplots/reference/Rohwer.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Rohwer Data Set — Rohwer","text":"variables SAT, PPVT Raven responses potentially explained performance paired-associate (PA) learning taskn, s, ns, na, ss.","code":""},{"path":"https://friendly.github.io/heplots/reference/Rohwer.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Rohwer Data Set — Rohwer","text":"Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421--444. http://datavis.ca/papers/jcgs-heplots.pdf","code":""},{"path":"https://friendly.github.io/heplots/reference/Rohwer.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Rohwer Data Set — Rohwer","text":"","code":"str(Rohwer) #> 'data.frame':\t69 obs. of 10 variables: #> $ group: int 1 1 1 1 1 1 1 1 1 1 ... #> $ SES : Factor w/ 2 levels \"Hi\",\"Lo\": 2 2 2 2 2 2 2 2 2 2 ... #> $ SAT : int 49 47 11 9 69 35 6 8 49 8 ... #> $ PPVT : int 48 76 40 52 63 82 71 68 74 70 ... #> $ Raven: int 8 13 13 9 15 14 21 8 11 15 ... #> $ n : int 1 5 0 0 2 2 0 0 0 3 ... #> $ s : int 2 14 10 2 7 15 1 0 0 2 ... #> $ ns : int 6 14 21 5 11 21 20 10 7 21 ... #> $ na : int 12 30 16 17 26 34 23 19 16 26 ... #> $ ss : int 16 27 16 8 17 25 18 14 13 25 ... ## ANCOVA, assuming equal slopes rohwer.mod <- lm(cbind(SAT, PPVT, Raven) ~ SES + n + s + ns + na + ss, data=Rohwer) car::Anova(rohwer.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> SES 1 0.37853 12.1818 3 60 2.507e-06 *** #> n 1 0.04030 0.8400 3 60 0.477330 #> s 1 0.09271 2.0437 3 60 0.117307 #> ns 1 0.19283 4.7779 3 60 0.004729 ** #> na 1 0.23134 6.0194 3 60 0.001181 ** #> ss 1 0.04990 1.0504 3 60 0.376988 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # Visualize the ANCOVA model heplot(rohwer.mod) # Add ellipse to test all 5 regressors heplot(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\"))) # View all pairs pairs(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\"))) # or 3D plot if (FALSE) { col <- c(\"red\", \"green3\", \"blue\", \"cyan\", \"magenta\", \"brown\", \"gray\") heplot3d(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\")), col=col, wire=FALSE) } ## fit separate, independent models for Lo/Hi SES rohwer.ses1 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, data=Rohwer, subset=SES==\"Hi\") rohwer.ses2 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, data=Rohwer, subset=SES==\"Lo\") # overlay the separate HE plots heplot(rohwer.ses1, ylim=c(40,110),col=c(\"red\", \"black\")) heplot(rohwer.ses2, add=TRUE, col=c(\"blue\", \"black\"), grand.mean=TRUE, error.ellipse=TRUE)"},{"path":"https://friendly.github.io/heplots/reference/RootStock.html","id":null,"dir":"Reference","previous_headings":"","what":"Growth of Apple Trees from Different Root Stocks — RootStock","title":"Growth of Apple Trees from Different Root Stocks — RootStock","text":"classic experiment carried 1918 1934, growth apple trees six different rootstocks compared four measures size.","code":""},{"path":"https://friendly.github.io/heplots/reference/RootStock.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Growth of Apple Trees from Different Root Stocks — RootStock","text":"data frame 48 observations following 5 variables. rootstock factor levels 1 2 3 4 5 6 girth4 numeric vector: trunk girth 4 years (mm x 100) ext4 numeric vector: extension growth 4 years (m) girth15 numeric vector: trunk girth 15 years (mm x 100) weight15 numeric vector: weight tree ground 15 years (lb x 1000)","code":""},{"path":"https://friendly.github.io/heplots/reference/RootStock.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Growth of Apple Trees from Different Root Stocks — RootStock","text":"Andrews, D. Herzberg, . (1985). Data: Collection Problems Many Fields Student Research Worker Springer-Verlag, pp. 357--360.","code":""},{"path":"https://friendly.github.io/heplots/reference/RootStock.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Growth of Apple Trees from Different Root Stocks — RootStock","text":"balanced, one-way MANOVA design, n=8 trees rootstock.","code":""},{"path":"https://friendly.github.io/heplots/reference/RootStock.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Growth of Apple Trees from Different Root Stocks — RootStock","text":"Rencher, . C. (1995). Methods Multivariate Analysis. New York: Wiley, Table 6.2","code":""},{"path":"https://friendly.github.io/heplots/reference/RootStock.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Growth of Apple Trees from Different Root Stocks — RootStock","text":"","code":"library(car) data(RootStock) ## maybe str(RootStock) ; plot(RootStock) ... root.mod <- lm(cbind(girth4, ext4, girth15, weight15) ~ rootstock, data=RootStock) car::Anova(root.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> rootstock 5 1.3055 4.0697 20 168 1.983e-07 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 pairs(root.mod) # test two orthogonal contrasts among the rootstocks hyp <- matrix(c(2,-1,-1,-1,-1,2, 1, 0,0,0,0,-1), 2, 6, byrow=TRUE) car::linearHypothesis(root.mod, hyp) #> #> Sum of squares and products for the hypothesis: #> girth4 ext4 girth15 weight15 #> girth4 2.684223 7.573365 7.792122 1.617892 #> ext4 7.573365 22.489458 23.293194 5.760003 #> girth15 7.792122 23.293194 24.145778 6.090615 #> weight15 1.617892 5.760003 6.090615 2.248755 #> #> Sum of squares and products for error: #> girth4 ext4 girth15 weight15 #> girth4 0.3199875 1.696564 0.5540875 0.217140 #> ext4 1.6965637 12.142790 4.3636125 2.110214 #> girth15 0.5540875 4.363612 4.2908125 2.481656 #> weight15 0.2171400 2.110214 2.4816562 1.722525 #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 1.426293 24.86102 8 80 < 2.22e-16 *** #> Wilks 2 0.020401 58.51245 8 78 < 2.22e-16 *** #> Hotelling-Lawley 2 26.121884 124.07895 8 76 < 2.22e-16 *** #> Roy 2 25.254884 252.54884 4 40 < 2.22e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(root.mod, hypotheses=list(Contrasts=hyp, C1=hyp[1,], C2=hyp[2,])) heplot1d(root.mod, hypotheses=list(Contrasts=hyp, C1=hyp[1,], C2=hyp[2,]))"},{"path":"https://friendly.github.io/heplots/reference/Sake.html","id":null,"dir":"Reference","previous_headings":"","what":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","title":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","text":"Siotani et al. (1985) describe study Japanese rice wine (sake) used investigate relationship two subjective ratings (taste smell) number physical measurements 30 brands sake.","code":""},{"path":"https://friendly.github.io/heplots/reference/Sake.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","text":"data frame 30 observations following 10 variables. taste mean taste rating smell mean smell rating pH pH measurement acidity1 one measure acidity acidity2 another measure acidity sake Sake-meter score rsugar direct reducing sugar content tsugar total sugar content alcohol alcohol content nitrogen formol-nitrogen content","code":""},{"path":"https://friendly.github.io/heplots/reference/Sake.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","text":"Siotani, M. Hayakawa, T. & Fujikoshi, Y. (1985). Modern Multivariate Statistical Analysis: Graduate Course Handbook. American Sciences Press, p. 217.","code":""},{"path":"https://friendly.github.io/heplots/reference/Sake.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","text":"data provide one example case multivariate regression benefit multiple outcome measures, using standard tests. Barrett (2003) uses data illustrate influence measures multivariate regression models. taste smell values mean ratings 10 experts unknown scale.","code":""},{"path":"https://friendly.github.io/heplots/reference/Sake.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","text":"Barrett, B. E. (2003). Understanding Influence Multivariate Regression. Communications Statistics - Theory Methods 32 (3), 667-680.","code":""},{"path":"https://friendly.github.io/heplots/reference/Sake.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","text":"","code":"data(Sake) # quick look at the data boxplot(scale(Sake)) Sake.mod <- lm(cbind(taste,smell) ~ ., data=Sake) library(car) car::Anova(Sake.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> pH 1 0.276246 3.8169 2 20 0.03944 * #> acidity1 1 0.030788 0.3177 2 20 0.73145 #> acidity2 1 0.183297 2.2444 2 20 0.13202 #> sake 1 0.141187 1.6440 2 20 0.21827 #> rsugar 1 0.178200 2.1684 2 20 0.14050 #> tsugar 1 0.054842 0.5802 2 20 0.56891 #> alcohol 1 0.075954 0.8220 2 20 0.45387 #> nitrogen 1 0.056486 0.5987 2 20 0.55909 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 predictors <- colnames(Sake)[-(1:2)] # overall multivariate regression test linearHypothesis(Sake.mod, predictors) #> #> Sum of squares and products for the hypothesis: #> taste smell #> taste 1.4171079 0.5786338 #> smell 0.5786338 1.4095094 #> #> Sum of squares and products for error: #> taste smell #> taste 3.172559 2.248366 #> smell 2.248366 4.173491 #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 8 0.6300580 1.207279 16 42 0.30236 #> Wilks 8 0.4642360 1.169193 16 40 0.33210 #> Hotelling-Lawley 8 0.9509599 1.129265 16 38 0.36489 #> Roy 8 0.6270207 1.645929 8 21 0.17134 heplot(Sake.mod, hypotheses=list(\"Regr\" = predictors))"},{"path":"https://friendly.github.io/heplots/reference/schooldata.html","id":null,"dir":"Reference","previous_headings":"","what":"School Data — schooldata","title":"School Data — schooldata","text":"School Data, Charnes et al. (1981). aim explain scores 3 different tests, reading, mathematics selfesteem 70 school sites means 5 explanatory variables related parents teachers.","code":""},{"path":"https://friendly.github.io/heplots/reference/schooldata.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"School Data — schooldata","text":"data frame 70 observations following 8 variables. education Education level mother measured terms percentage high school graduates among female parents occupation Highest occupation family member according pre-arranged rating scale visit Parental visits index representing number visits school site counseling Parent counseling index calculated data time spent child school-related topics reading together, etc. teacher Number teachers given site reading Reading score measured Metropolitan Achievement Test mathematics Mathematics score measured Metropolitan Achievement Test selfesteem Coopersmith Self-Esteem Inventory, intended measure self-esteem","code":""},{"path":"https://friendly.github.io/heplots/reference/schooldata.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"School Data — schooldata","text":". Charnes, W.W. Cooper E. Rhodes (1981). Evaluating Program Managerial Efficiency: Application Data Envelopment Analysis Program Follow . Management Science, 27, 668-697.","code":""},{"path":"https://friendly.github.io/heplots/reference/schooldata.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"School Data — schooldata","text":"dataset shamelessly borrowed FRB package. relationships among variables unusual, fact revealed plotting.","code":""},{"path":"https://friendly.github.io/heplots/reference/schooldata.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"School Data — schooldata","text":"","code":"data(schooldata) # initial screening plot(schooldata) # better plot library(corrgram) corrgram(schooldata, lower.panel=panel.ellipse, upper.panel=panel.pts) #fit the MMreg model school.mod <- lm(cbind(reading, mathematics, selfesteem) ~ education + occupation + visit + counseling + teacher, data=schooldata) # shorthand: fit all others school.mod <- lm(cbind(reading, mathematics, selfesteem) ~ ., data=schooldata) car::Anova(school.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> education 1 0.37564 12.4337 3 62 1.820e-06 *** #> occupation 1 0.56658 27.0159 3 62 2.687e-11 *** #> visit 1 0.26032 7.2734 3 62 0.0002948 *** #> counseling 1 0.06465 1.4286 3 62 0.2429676 #> teacher 1 0.04906 1.0661 3 62 0.3700291 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # HE plots heplot(school.mod, fill=TRUE, fill.alpha=0.1) pairs(school.mod, fill=TRUE, fill.alpha=0.1) # robust model, using robmlm() school.rmod <- robmlm(cbind(reading, mathematics, selfesteem) ~ ., data=schooldata) # note that counseling is now significant car::Anova(school.rmod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> education 1 0.39455 12.8161 3 59 1.488e-06 *** #> occupation 1 0.59110 28.4301 3 59 1.683e-11 *** #> visit 1 0.23043 5.8888 3 59 0.0013819 ** #> counseling 1 0.25257 6.6456 3 59 0.0006083 *** #> teacher 1 0.09812 2.1395 3 59 0.1048263 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # Index plot of the weights wts <- school.rmod$weights notable <- which(wts < 0.8) plot(wts, type = \"h\", col=\"gray\", ylab = \"Observation weight\") points(1:length(wts), wts, pch=16, col = ifelse(wts < 0.8, \"red\", \"black\")) text(notable, wts[notable], labels = notable, pos = 3, col = \"red\") # compare classical HE plot with that based on the robust model heplot(school.mod, cex=1.4, lty=1, fill=TRUE, fill.alpha=0.1) heplot(school.rmod, add=TRUE, error.ellipse=TRUE, lwd=c(2,2), lty=c(2,2), term.labels=FALSE, err.label=\"\", fill=TRUE)"},{"path":"https://friendly.github.io/heplots/reference/Skulls.html","id":null,"dir":"Reference","previous_headings":"","what":"Egyptian Skulls — Skulls","title":"Egyptian Skulls — Skulls","text":"Measurements made Egyptian skulls five epochs.","code":""},{"path":"https://friendly.github.io/heplots/reference/Skulls.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Egyptian Skulls — Skulls","text":"data frame 150 observations following 5 variables. epoch epoch skull assigned , ordered factor levels c4000BC c3300BC, c1850BC, c200BC, cAD150, years given approximately, course. mb maximal breadth skull. bh basibregmatic height skull. bl basialiveolar length skull. nh nasal height skull.","code":""},{"path":"https://friendly.github.io/heplots/reference/Skulls.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Egyptian Skulls — Skulls","text":"D. J. Hand, F. Daly, . D. Lunn, K. J. McConway E. Ostrowski (1994). Handbook Small Datasets, Chapman Hall/CRC, London.","code":""},{"path":"https://friendly.github.io/heplots/reference/Skulls.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Egyptian Skulls — Skulls","text":"epochs correspond following periods Egyptian history: early predynastic period (circa 4000 BC); late predynastic period (circa 3300 BC); 12th 13th dynasties (circa 1850 BC); Ptolemiac period (circa 200 BC); Roman period (circa 150 AD). question whether measurements change time. Non-constant measurements skulls time indicate interbreeding immigrant populations. Note using polynomial contrasts epoch essentially treats time points equally spaced.","code":""},{"path":"https://friendly.github.io/heplots/reference/Skulls.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Egyptian Skulls — Skulls","text":"Thomson, . Randall-Maciver, R. (1905) Ancient Races Thebaid, Oxford: Oxford University Press. Hand, D. J., F. Daly, . D. Lunn, K. J. McConway E. Ostrowski (1994). Handbook Small Datasets, Chapman Hall/CRC, London.","code":""},{"path":"https://friendly.github.io/heplots/reference/Skulls.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Egyptian Skulls — Skulls","text":"","code":"data(Skulls) library(car) # for Anova # make shorter labels for epochs Skulls$epoch <- factor(Skulls$epoch, labels=sub(\"c\",\"\",levels(Skulls$epoch))) # longer variable labels vlab <- c(\"maxBreadth\", \"basibHeight\", \"basialLength\", \"nasalHeight\") # fit manova model sk.mod <- lm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) Anova(sk.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> epoch 4 0.35331 3.512 16 580 4.675e-06 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 summary(Anova(sk.mod)) #> #> Type II MANOVA Tests: #> #> Sum of squares and products for error: #> mb bh bl nh #> mb 3061.066667 5.333333 11.46667 291.3000 #> bh 5.333333 3405.266667 754.00000 412.5333 #> bl 11.466667 754.000000 3505.96667 164.3333 #> nh 291.300000 412.533333 164.33333 1472.1333 #> #> ------------------------------------------ #> #> Term: epoch #> #> Sum of squares and products for the hypothesis: #> mb bh bl nh #> mb 502.8267 -228.14667 -626.6267 135.43333 #> bh -228.1467 229.90667 292.2800 -66.06667 #> bl -626.6267 292.28000 803.2933 -180.73333 #> nh 135.4333 -66.06667 -180.7333 61.20000 #> #> Multivariate Tests: epoch #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 4 0.3533056 3.512037 16 580.0000 4.6753e-06 *** #> Wilks 4 0.6635858 3.900928 16 434.4548 7.0102e-07 *** #> Hotelling-Lawley 4 0.4818191 4.230974 16 562.0000 8.2782e-08 *** #> Roy 4 0.4250954 15.409707 4 145.0000 1.5883e-10 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test trends over epochs print(linearHypothesis(sk.mod, \"epoch.L\"), SSP=FALSE) # linear component #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.2913791 14.59731 4 142 5.1953e-10 *** #> Wilks 1 0.7086209 14.59731 4 142 5.1953e-10 *** #> Hotelling-Lawley 1 0.4111918 14.59731 4 142 5.1953e-10 *** #> Roy 1 0.4111918 14.59731 4 142 5.1953e-10 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 print(linearHypothesis(sk.mod, \"epoch.Q\"), SSP=FALSE) # quadratic component #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.0183468 0.6634844 4 142 0.61837 #> Wilks 1 0.9816532 0.6634844 4 142 0.61837 #> Hotelling-Lawley 1 0.0186897 0.6634844 4 142 0.61837 #> Roy 1 0.0186897 0.6634844 4 142 0.61837 # typical scatterplots are not very informative scatterplot(mb ~ bh|epoch, data=Skulls, ellipse = list(levels=0.68), smooth=FALSE, legend = list(coords=\"topright\"), xlab=vlab[2], ylab=vlab[1]) scatterplot(mb ~ bl|epoch, data=Skulls, ellipse = list(levels=0.68), smooth=FALSE, legend = list(coords=\"topright\"), xlab=vlab[3], ylab=vlab[1]) # HE plots heplot(sk.mod, hypotheses=list(Lin=\"epoch.L\", Quad=\"epoch.Q\"), xlab=vlab[1], ylab=vlab[2]) pairs(sk.mod, hypotheses=list(Lin=\"epoch.L\", Quad=\"epoch.Q\"), var.labels=vlab) # 3D plot shows that nearly all of hypothesis variation is linear! if (FALSE) { heplot3d(sk.mod, hypotheses=list(Lin=\"epoch.L\", Quad=\"epoch.Q\"), col=c(\"pink\", \"blue\")) # view in canonical space if (require(candisc)) { sk.can <- candisc(sk.mod) sk.can heplot(sk.can) heplot3d(sk.can) } }"},{"path":"https://friendly.github.io/heplots/reference/SocGrades.html","id":null,"dir":"Reference","previous_headings":"","what":"Grades in a Sociology Course — SocGrades","title":"Grades in a Sociology Course — SocGrades","text":"data set SocGrades contains four outcome measures student performance introductory sociology course together six potential predictors. data used Marascuilo Levin (1983) example canonical correlation analysis, also suitable examples multivariate multiple regression, MANOVA, MANCOVA step-analysis multivariate linear models.","code":""},{"path":"https://friendly.github.io/heplots/reference/SocGrades.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Grades in a Sociology Course — SocGrades","text":"data frame 40 observations following 10 variables. class Social class, ordered factor levels 1 > 2 > 3 sex sex, factor levels F M gpa grade point average boards College Board test scores hssoc previous high school unit sociology, factor 2 , yes pretest score course pretest midterm1 score first midterm exam midterm2 score second midterm exam final score final exam eval course evaluation","code":""},{"path":"https://friendly.github.io/heplots/reference/SocGrades.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Grades in a Sociology Course — SocGrades","text":"Marascuilo, L. . Levin, J. R. (1983). Multivariate Statistics Social Sciences Monterey, CA: Brooks/Cole, Table 5-1, p. 192.","code":""},{"path":"https://friendly.github.io/heplots/reference/SocGrades.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Grades in a Sociology Course — SocGrades","text":"midterm1, midterm2, final, possibly eval response variables. variables potential predictors. factors class, sex, hssoc can used .numeric correlational analyses.","code":""},{"path":"https://friendly.github.io/heplots/reference/SocGrades.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Grades in a Sociology Course — SocGrades","text":"","code":"data(SocGrades) # basic MLM grades.mod <- lm(cbind(midterm1, midterm2, final, eval) ~ class + sex + gpa + boards + hssoc + pretest, data=SocGrades) car::Anova(grades.mod, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> class 2 1.56729 11.7547 4 30 7.322e-06 *** #> sex 1 0.55300 4.0092 4 29 0.010419 * #> gpa 1 1.20780 8.7566 4 29 9.195e-05 *** #> boards 1 0.73142 5.3028 4 29 0.002489 ** #> hssoc 1 0.03496 0.2535 4 29 0.905171 #> pretest 1 0.31307 2.2697 4 29 0.085881 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 clr <- c(\"red\", \"blue\", \"darkgreen\", \"magenta\", \"brown\", \"black\", \"darkgray\") heplot(grades.mod, col=clr) pairs(grades.mod, col=clr) if (FALSE) { heplot3d(grades.mod, col=clr, wire=FALSE) } if (require(candisc)) { # calculate canonical results for all terms grades.can <- candiscList(grades.mod) # extract canonical R^2s unlist(lapply(grades.can, function(x) x$canrsq)) # plot class effect in canonical space heplot(grades.can, term=\"class\", scale=4) # 1 df terms: show canonical scores and weights for responses plot(grades.can, term=\"sex\") plot(grades.can, term=\"gpa\") plot(grades.can, term=\"boards\") }"},{"path":"https://friendly.github.io/heplots/reference/SocialCog.html","id":null,"dir":"Reference","previous_headings":"","what":"Social Cognitive Measures in Psychiatric Groups — SocialCog","title":"Social Cognitive Measures in Psychiatric Groups — SocialCog","text":"general purpose study (Hartman, 2016, Heinrichs et al. (2015)) evaluate patterns levels performance neurocognitive measures among individuals schizophrenia schizoaffective disorder using well-validated, comprehensive neurocognitive battery specifically designed individuals psychosis (Heinrichs et al. (2008))","code":""},{"path":"https://friendly.github.io/heplots/reference/SocialCog.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Social Cognitive Measures in Psychiatric Groups — SocialCog","text":"data frame 139 observations following 5 variables. Dx Diagnostic group, factor levels Schizophrenia, Schizoaffective, Control MgeEmotions Score Managing emotions test, numeric vector ToM Score Reading Mind Eyes test (theory mind), numeric vector ExtBias Externalizing Bias score, numeric vector PersBias Personal Bias score, numeric vector","code":""},{"path":"https://friendly.github.io/heplots/reference/SocialCog.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Social Cognitive Measures in Psychiatric Groups — SocialCog","text":"Hartman, L. . (2016). Schizophrenia Schizoaffective Disorder: One Condition Two? Unpublished PhD dissertation, York University. Heinrichs, R.W., Pinnock, F., Muharib, E., Hartman, L.., Goldberg, J.O., & McDermid Vaz, S. (2015). Neurocognitive normality schizophrenia revisited. Schizophrenia Research: Cognition, 2 (4), 227-232. doi: 10.1016/j.scog.2015.09.001","code":""},{"path":"https://friendly.github.io/heplots/reference/SocialCog.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Social Cognitive Measures in Psychiatric Groups — SocialCog","text":"data subset observations NeuroCog measures various scales social cognition also available. Interest whether schizophrenia group can distinguished schizoaffective group measures. Social Cognitive measures designed tap various aspects perception cognitive procession emotions others. Emotion perception assessed using Managing Emotions (MgeEmotions) score MCCB. \"theory mind\" (ToM) score assessed ability read emotions others photographs eye region male female faces. Two measures, externalizing bias (ExtBias) personalizing bias (PersBias) calculated scale measuring degree individuals attribute internal, personal situational causal attributions positive negative social events. See NeuroCog description sample. complete data social cognitive measures included data set. one extreme outlier schizophrenia group possible outliers control group, left tutorial purposes.","code":""},{"path":"https://friendly.github.io/heplots/reference/SocialCog.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Social Cognitive Measures in Psychiatric Groups — SocialCog","text":"","code":"library(car) data(SocialCog) SC.mod <- lm(cbind(MgeEmotions, ToM, ExtBias, PersBias) ~ Dx, data=SocialCog) SC.mod #> #> Call: #> lm(formula = cbind(MgeEmotions, ToM, ExtBias, PersBias) ~ Dx, #> data = SocialCog) #> #> Coefficients: #> MgeEmotions ToM ExtBias PersBias #> (Intercept) 41.80533 22.88849 1.75603 0.65488 #> Dx1 3.24012 2.09636 1.01670 -0.07297 #> Dx2 -4.34806 -1.02636 -0.85233 -0.01599 #> car::Anova(SC.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Dx 2 0.21207 3.9735 8 268 0.0001817 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test hypotheses of interest in terms of contrasts print(linearHypothesis(SC.mod, \"Dx1\"), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.1355144 5.21218 4 133 0.00062359 *** #> Wilks 1 0.8644856 5.21218 4 133 0.00062359 *** #> Hotelling-Lawley 1 0.1567573 5.21218 4 133 0.00062359 *** #> Roy 1 0.1567573 5.21218 4 133 0.00062359 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 print(linearHypothesis(SC.mod, \"Dx2\"), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.0697390 2.492658 4 133 0.046059 * #> Wilks 1 0.9302610 2.492658 4 133 0.046059 * #> Hotelling-Lawley 1 0.0749672 2.492658 4 133 0.046059 * #> Roy 1 0.0749672 2.492658 4 133 0.046059 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #' ## HE plots heplot(SC.mod, hypotheses=list(\"Dx1\"=\"Dx1\", \"Dx2\"=\"Dx2\"), fill=TRUE, fill.alpha=.1) pairs(SC.mod, fill=c(TRUE,FALSE), fill.alpha=.1)"},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate statistics for levels of factors — statList","title":"Calculate statistics for levels of factors — statList","text":"statList provides general method calculating univariate multivariate statistics matrix data.frame stratified one factors.","code":""},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate statistics for levels of factors — statList","text":"","code":"statList(X, factors, FUN, drop = FALSE, ...)"},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate statistics for levels of factors — statList","text":"X matrix data frame containing variables summarized factors vector, matrix data frame containing factors X summarized. factors specified, result calculated data X. FUN function applied pieces X, split factors. drop Logical, indicating whether empty levels factors dropped result. ... arguments, passed FUN.","code":""},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate statistics for levels of factors — statList","text":"Returns list items corresponding unique elements factors, interaction factors. item result applying FUN collection rows X. items named according levels factors.","code":""},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate statistics for levels of factors — statList","text":"statList general function. X first split factors, FUN applied result. colMeansList covList just calls statList appropriate FUN.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate statistics for levels of factors — statList","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate statistics for levels of factors — statList","text":"","code":"# grand means statList(iris[,1:4], FUN=colMeans) #> [[1]] #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.843333 3.057333 3.758000 1.199333 #> # species means statList(iris[,1:4], iris$Species, FUN=colMeans) #> $setosa #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.006 3.428 1.462 0.246 #> #> $versicolor #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.936 2.770 4.260 1.326 #> #> $virginica #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 6.588 2.974 5.552 2.026 #> # same colMeansList(iris[,1:4], iris$Species) #> $setosa #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.006 3.428 1.462 0.246 #> #> $versicolor #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.936 2.770 4.260 1.326 #> #> $virginica #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 6.588 2.974 5.552 2.026 #> # var-cov matrices, by species covList(iris[,1:4], iris$Species) #> $setosa #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> Sepal.Length 0.12424898 0.099216327 0.016355102 0.010330612 #> Sepal.Width 0.09921633 0.143689796 0.011697959 0.009297959 #> Petal.Length 0.01635510 0.011697959 0.030159184 0.006069388 #> Petal.Width 0.01033061 0.009297959 0.006069388 0.011106122 #> #> $versicolor #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> Sepal.Length 0.26643265 0.08518367 0.18289796 0.05577959 #> Sepal.Width 0.08518367 0.09846939 0.08265306 0.04120408 #> Petal.Length 0.18289796 0.08265306 0.22081633 0.07310204 #> Petal.Width 0.05577959 0.04120408 0.07310204 0.03910612 #> #> $virginica #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> Sepal.Length 0.40434286 0.09376327 0.30328980 0.04909388 #> Sepal.Width 0.09376327 0.10400408 0.07137959 0.04762857 #> Petal.Length 0.30328980 0.07137959 0.30458776 0.04882449 #> Petal.Width 0.04909388 0.04762857 0.04882449 0.07543265 #> # multiple factors iris$Dummy <- sample(c(\"Hi\",\"Lo\"),150, replace=TRUE) colMeansList(iris[,1:4], iris[,5:6]) #> $setosa.Hi #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 4.930769 3.342308 1.476923 0.250000 #> #> $versicolor.Hi #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.884 2.720 4.208 1.308 #> #> $virginica.Hi #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 6.658333 3.008333 5.625000 2.066667 #> #> $setosa.Lo #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.0875000 3.5208333 1.4458333 0.2416667 #> #> $versicolor.Lo #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.988 2.820 4.312 1.344 #> #> $virginica.Lo #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 6.523077 2.942308 5.484615 1.988462 #>"},{"path":"https://friendly.github.io/heplots/reference/termMeans.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","title":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","text":"termMeans utility function designed calculate means levels factor(s) term multivariate linear model.","code":""},{"path":"https://friendly.github.io/heplots/reference/termMeans.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","text":"","code":"termMeans(mod, term, label.factors = FALSE, abbrev.levels = FALSE)"},{"path":"https://friendly.github.io/heplots/reference/termMeans.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","text":"mod mlm model object term character string indicating given term model. factors term must included model, even model data frame. label.factors true, rownames row result include name(s) factor(s) involved, followed level values. Otherwise, rownames include levels factor(s), multiple factors separated ':' abbrev.levels Either logical integer, specifying whether levels values factors term abbreviated constructing rownames. integer specifies minimum length abbreviation factor term.","code":""},{"path":"https://friendly.github.io/heplots/reference/termMeans.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","text":"Returns matrix whose columns correspond response variables model whose rows correspond levels factor(s) term.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/termMeans.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/termMeans.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","text":"","code":"factors <- expand.grid(A=factor(1:3),B=factor(1:2),C=factor(1:2)) n <- nrow(factors) responses <-data.frame(Y1=10+round(10*rnorm(n)),Y2=10+round(10*rnorm(n))) test <- data.frame(factors, responses) mod <- lm(cbind(Y1,Y2) ~ A*B, data=test) termMeans(mod, \"A\") #> Y1 Y2 #> 1 17.00 12.25 #> 2 9.50 10.75 #> 3 13.75 2.00 termMeans(mod, \"A:B\") #> Y1 Y2 #> 1:1 10.0 10.0 #> 2:1 3.0 19.5 #> 3:1 17.5 6.0 #> 1:2 24.0 14.5 #> 2:2 16.0 2.0 #> 3:2 10.0 -2.0 termMeans(mod, \"A:B\", label.factors=TRUE) #> Y1 Y2 #> A1:B1 10.0 10.0 #> A2:B1 3.0 19.5 #> A3:B1 17.5 6.0 #> A1:B2 24.0 14.5 #> A2:B2 16.0 2.0 #> A3:B2 10.0 -2.0 if (FALSE) { termMeans(mod, \"A:B:C\") # generates an error } plastic.mod <- lm(cbind(tear, gloss, opacity) ~ rate*additive, data=Plastic) colors = c(\"red\", \"darkblue\", \"darkgreen\", \"brown\") heplot(plastic.mod, col=colors, cex=1.25) # add means for interaction term intMeans <- termMeans(plastic.mod, 'rate:additive', abbrev=2) points(intMeans[,1], intMeans[,2], pch=18, cex=1.2, col=\"brown\") text(intMeans[,1], intMeans[,2], rownames(intMeans), adj=c(0.5,1), col=\"brown\")"},{"path":"https://friendly.github.io/heplots/reference/TIPI.html","id":null,"dir":"Reference","previous_headings":"","what":"Data on the Ten Item Personality Inventory — TIPI","title":"Data on the Ten Item Personality Inventory — TIPI","text":"Ten Item Personality Inventory (Gosling et al. 2003) brief inventory Big Five personality domains (Extraversion, Neuroticism, Conscientiousness, Agreeableness, Openness experience). dataset, originally Open Source Psychometrics Project (https://openpsychometrics.org/), used Jones et al. (2020), obtained version.","code":""},{"path":"https://friendly.github.io/heplots/reference/TIPI.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Data on the Ten Item Personality Inventory — TIPI","text":"data frame 1799 observations following 16 variables. Extraversion numeric vector Neuroticism numeric vector Conscientiousness numeric vector Agreeableness numeric vector Openness numeric vector education ordered factor levels #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> engnat 1 0.025927 9.327 5 1752 8.817e-09 *** #> gender 1 0.088275 33.926 5 1752 < 2.2e-16 *** #> education 3 0.080337 9.653 15 5262 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(tipi.mlm, fill=TRUE, fill.alpha=0.1) pairs(tipi.mlm, fill=TRUE, fill.alpha=0.1) # candisc works best for factors with >2 levels library(candisc) tipi.can <- candisc(tipi.mlm, term=\"education\") tipi.can #> #> Canonical Discriminant Analysis for education: #> #> CanRsq Eigenvalue Difference Percent Cumulative #> 1 0.0740709 0.0799963 0.075792 92.7124 92.712 #> 2 0.0041870 0.0042046 0.075792 4.8730 97.585 #> 3 0.0020791 0.0020834 0.075792 2.4146 100.000 #> #> Test of H0: The canonical correlations in the #> current row and all that follow are zero #> #> LR test stat approx F numDF denDF Pr(> F) #> 1 0.92014 9.8819 15 4842.4 <2e-16 *** #> 2 0.99374 1.3792 8 3510.0 0.2002 #> 3 0.99792 1.2195 3 1756.0 0.3011 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(tipi.can, fill=TRUE, fill.alpha=0.1, var.col = \"darkred\", var.cex = 1.5, var.lwd = 3) #> Vector scale factor set to 9.339074"},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":null,"dir":"Reference","previous_headings":"","what":"Make Colors Transparent — trans.colors","title":"Make Colors Transparent — trans.colors","text":"Takes vector colors (color names rgb hex values) adds specified alpha transparency .","code":""},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Make Colors Transparent — trans.colors","text":"","code":"trans.colors(col, alpha = 0.5, names = NULL)"},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Make Colors Transparent — trans.colors","text":"col character vector colors, either color names rgb hex values alpha alpha transparency value(s) apply color (0 means fully transparent 1 means opaque) names optional character vector names colors","code":""},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Make Colors Transparent — trans.colors","text":"vector color values form \"#rrggbbaa\"","code":""},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Make Colors Transparent — trans.colors","text":"Colors (col) alpha need length. shorter one replicated make length.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Make Colors Transparent — trans.colors","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Make Colors Transparent — trans.colors","text":"","code":"trans.colors(palette(), alpha=0.5) #> [1] \"#00000080\" \"#DF536B80\" \"#61D04F80\" \"#2297E680\" \"#28E2E580\" \"#CD0BBC80\" #> [7] \"#F5C71080\" \"#9E9E9E80\" # alpha can be vectorized trans.colors(palette(), alpha=seq(0, 1, length=length(palette()))) #> [1] \"#00000000\" \"#DF536B24\" \"#61D04F49\" \"#2297E66D\" \"#28E2E592\" \"#CD0BBCB6\" #> [7] \"#F5C710DB\" \"#9E9E9EFF\" # lengths need not match: shorter one is repeated as necessary trans.colors(palette(), alpha=c(.1, .2)) #> [1] \"#0000001A\" \"#DF536B33\" \"#61D04F1A\" \"#2297E633\" \"#28E2E51A\" \"#CD0BBC33\" #> [7] \"#F5C7101A\" \"#9E9E9E33\" trans.colors(colors()[1:20]) #> [1] \"#FFFFFF80\" \"#F0F8FF80\" \"#FAEBD780\" \"#FFEFDB80\" \"#EEDFCC80\" \"#CDC0B080\" #> [7] \"#8B837880\" \"#7FFFD480\" \"#7FFFD480\" \"#76EEC680\" \"#66CDAA80\" \"#458B7480\" #> [13] \"#F0FFFF80\" \"#F0FFFF80\" \"#E0EEEE80\" \"#C1CDCD80\" \"#838B8B80\" \"#F5F5DC80\" #> [19] \"#FFE4C480\" \"#FFE4C480\" # single color, with various alphas trans.colors(\"red\", alpha=seq(0,1, length=5)) #> [1] \"#FF000000\" \"#FF000040\" \"#FF000080\" \"#FF0000BF\" \"#FF0000FF\" # assign names trans.colors(\"red\", alpha=seq(0,1, length=5), names=paste(\"red\", 1:5, sep=\"\")) #> red1 red2 red3 red4 red5 #> \"#FF000000\" \"#FF000040\" \"#FF000080\" \"#FF0000BF\" \"#FF0000FF\""},{"path":"https://friendly.github.io/heplots/reference/VocabGrowth.html","id":null,"dir":"Reference","previous_headings":"","what":"Vocabulary growth data — VocabGrowth","title":"Vocabulary growth data — VocabGrowth","text":"Data Laboratory School University Chicago. consist scores cohort pupils grades 8-11 vocabulary section Cooperative Reading Test. scores scaled common, arbitrary origin unit measurement, comparable four grades.","code":""},{"path":"https://friendly.github.io/heplots/reference/VocabGrowth.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Vocabulary growth data — VocabGrowth","text":"data frame 64 observations following 4 variables. grade8 Grade 8 vocabulary score grade9 Grade 9 vocabulary score grade10 Grade 10 vocabulary score grade11 Grade 11 vocabulary score","code":""},{"path":"https://friendly.github.io/heplots/reference/VocabGrowth.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Vocabulary growth data — VocabGrowth","text":"R.D. Bock, Multivariate statistical methods behavioral research, McGraw-Hill, New York, 1975, pp453.","code":""},{"path":"https://friendly.github.io/heplots/reference/VocabGrowth.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Vocabulary growth data — VocabGrowth","text":"Since data cover age range physical growth beginning decelerate, interest whether similar effect occurs acquisition new vocabulary.","code":""},{"path":"https://friendly.github.io/heplots/reference/VocabGrowth.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Vocabulary growth data — VocabGrowth","text":"Friendly, Michael (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 . Keesling, J.W., Bock, R.D. et al, \"Laboratory School study vocabulary growth\", University Chicago, 1975.","code":""},{"path":"https://friendly.github.io/heplots/reference/VocabGrowth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Vocabulary growth data — VocabGrowth","text":"","code":"library(car) data(VocabGrowth) # Standard Multivariate & Univariate repeated measures analysis Vocab.mod <- lm(cbind(grade8,grade9,grade10,grade11) ~ 1, data=VocabGrowth) idata <-data.frame(grade=ordered(8:11)) car::Anova(Vocab.mod, idata=idata, idesign=~grade, type=\"III\") #> #> Type III Repeated Measures MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 0.65289 118.498 1 63 4.115e-16 *** #> grade 1 0.82578 96.376 3 61 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ##Type III Repeated Measures MANOVA Tests: Pillai test statistic ## Df test stat approx F num Df den Df Pr(>F) ##(Intercept) 1 0.653 118.498 1 63 4.115e-16 *** ##grade 1 0.826 96.376 3 61 < 2.2e-16 *** heplot(Vocab.mod, type=\"III\", idata=idata, idesign=~grade, iterm=\"grade\", main=\"HE plot for Grade effect\") ### doing this 'manually' by explicitly transforming Y -> Y M # calculate Y M, using polynomial contrasts trends <- as.matrix(VocabGrowth) %*% poly(8:11, degree=3) colnames(trends)<- c(\"Linear\", \"Quad\", \"Cubic\") # test all trend means = 0 == Grade effect within.mod <- lm(trends ~ 1) Manova(within.mod) #> Note: model has only an intercept; equivalent type-III tests substituted. #> #> Type III MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 0.82578 96.376 3 61 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(within.mod, terms=\"(Intercept)\", col=c(\"red\", \"blue\"), type=\"3\", term.labels=\"Grade\", main=\"HE plot for Grade effect\") mark.H0()"},{"path":"https://friendly.github.io/heplots/reference/WeightLoss.html","id":null,"dir":"Reference","previous_headings":"","what":"Weight Loss Data — WeightLoss","title":"Weight Loss Data — WeightLoss","text":"Contrived data weight loss self esteem three months, three groups individuals: Control, Diet Diet + Exercise. data constitute double-multivariate design.","code":""},{"path":"https://friendly.github.io/heplots/reference/WeightLoss.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Weight Loss Data — WeightLoss","text":"data frame 34 observations following 7 variables. group factor levels Control Diet DietEx. wl1 Weight loss 1 month wl2 Weight loss 2 months wl3 Weight loss 3 months se1 Self esteem 1 month se2 Self esteem 2 months se3 Self esteem 3 months","code":""},{"path":"https://friendly.github.io/heplots/reference/WeightLoss.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Weight Loss Data — WeightLoss","text":"Originally taken http://www.csun.edu/~ata20315/psy524/main.htm, modified slightly","code":""},{"path":"https://friendly.github.io/heplots/reference/WeightLoss.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Weight Loss Data — WeightLoss","text":"Helmert contrasts assigned group, comparing Control vs. (Diet DietEx) Diet vs. DietEx.","code":""},{"path":"https://friendly.github.io/heplots/reference/WeightLoss.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Weight Loss Data — WeightLoss","text":"Friendly, Michael (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 .","code":""},{"path":"https://friendly.github.io/heplots/reference/WeightLoss.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Weight Loss Data — WeightLoss","text":"","code":"data(WeightLoss) str(WeightLoss) #> 'data.frame':\t34 obs. of 7 variables: #> $ group: Factor w/ 3 levels \"Control\",\"Diet\",..: 1 1 1 1 1 1 1 1 1 1 ... #> ..- attr(*, \"contrasts\")= num [1:3, 1:2] -2 1 1 0 -1 1 #> .. ..- attr(*, \"dimnames\")=List of 2 #> .. .. ..$ : chr [1:3] \"Control\" \"Diet\" \"DietEx\" #> .. .. ..$ : NULL #> $ wl1 : int 4 4 4 3 5 6 6 5 5 3 ... #> $ wl2 : int 3 4 3 2 3 5 5 4 4 3 ... #> $ wl3 : int 3 3 1 1 2 4 4 1 1 2 ... #> $ se1 : int 14 13 17 11 16 17 17 13 14 14 ... #> $ se2 : int 13 14 12 11 15 18 16 15 14 15 ... #> $ se3 : int 15 17 16 12 14 18 19 15 15 13 ... table(WeightLoss$group) #> #> Control Diet DietEx #> 12 12 10 contrasts(WeightLoss$group) <- matrix(c(-2,1,1, 0, -1, 1),ncol=2) (wl.mod<-lm(cbind(wl1,wl2,wl3,se1,se2,se3)~group, data=WeightLoss)) #> #> Call: #> lm(formula = cbind(wl1, wl2, wl3, se1, se2, se3) ~ group, data = WeightLoss) #> #> Coefficients: #> wl1 wl2 wl3 se1 se2 se3 #> (Intercept) 5.34444 4.45000 2.17778 14.92778 13.79444 16.28333 #> group1 0.42222 0.55833 0.04722 0.08889 -0.26944 0.60000 #> group2 0.43333 1.09167 -0.02500 0.18333 -0.22500 0.71667 #> heplot(wl.mod, hypotheses=c(\"group1\", \"group2\")) pairs(wl.mod, variables=1:3) pairs(wl.mod, variables=4:6) # within-S variables within <- data.frame(measure=rep(c(\"Weight loss\", \"Self esteem\"),each=3), month=rep(ordered(1:3),2)) # doubly-multivariate analysis: requires car 2.0+ if (FALSE) { imatrix <- matrix(c( 1,0,-1, 1, 0, 0, 1,0, 0,-2, 0, 0, 1,0, 1, 1, 0, 0, 0,1, 0, 0,-1, 1, 0,1, 0, 0, 0,-2, 0,1, 0, 0, 1, 1), 6, 6, byrow=TRUE) # NB: for heplots the columns of imatrix should have names colnames(imatrix) <- c(\"WL\", \"SE\", \"WL.L\", \"WL.Q\", \"SE.L\", \"SE.Q\") rownames(imatrix) <- colnames(WeightLoss)[-1] (imatrix <- list(measure=imatrix[,1:2], month=imatrix[,3:6])) contrasts(WeightLoss$group) <- matrix(c(-2,1,1, 0,-1,1), ncol=2) (wl.mod<-lm(cbind(wl1, wl2, wl3, se1, se2, se3)~group, data=WeightLoss)) (wl.aov <- car::Anova(wl.mod, imatrix=imatrix, test=\"Roy\")) heplot(wl.mod, imatrix=imatrix, iterm=\"group:measure\") } # do the correct analysis 'manually' unit <- function(n, prefix=\"\") { J <-matrix(rep(1, n), ncol=1) rownames(J) <- paste(prefix, 1:n, sep=\"\") J } measure <- kronecker(diag(2), unit(3, 'M')/3, make.dimnames=TRUE) colnames(measure)<- c('WL', 'SE') between <- as.matrix(WeightLoss[,-1]) %*% measure between.mod <- lm(between ~ group, data=WeightLoss) car::Anova(between.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> group 2 0.26266 2.3434 4 62 0.06451 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(between.mod, hypotheses=c(\"group1\", \"group2\"), xlab=\"Weight Loss\", ylab=\"Self Esteem\", col=c(\"red\", \"blue\", \"brown\"), main=\"Weight Loss & Self Esteem: Group Effect\") month <- kronecker(diag(2), poly(1:3), make.dimnames=TRUE) colnames(month)<- c('WL', 'SE') trends <- as.matrix(WeightLoss[,-1]) %*% month within.mod <- lm(trends ~ group, data=WeightLoss) car::Anova(within.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> group 2 0.34305 3.2091 4 62 0.0185 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(within.mod) heplot(within.mod, hypotheses=c(\"group1\", \"group2\"), xlab=\"Weight Loss\", ylab=\"Self Esteem\", type=\"III\", remove.intercept=FALSE, term.labels=c(\"month\", \"group:month\"), main=\"Weight Loss & Self Esteem: Within-S Effects\") mark.H0()"},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-163-2024-03-05","dir":"Changelog","previous_headings":"","what":"Version 1.6.3 (2024-03-05)","title":"Version 1.6.3 (2024-03-05)","text":"Correct documentation error cqplot() cqplot() now returns DSQ values identified points Fixed small buglet re: labeling hypothesis ellipses heplot() Added new example (AddHealth data) HE_manova vignette","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-162-2024-02-14","dir":"Changelog","previous_headings":"","what":"Version 1.6.2 (2024-02-14)","title":"Version 1.6.2 (2024-02-14)","text":"CRAN release: 2024-02-15 Add peng dataset, version palmerpenguins::penguins Correct documentation problems Roxygen 7.3.1 (@docType)","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-161-2023-12-05","dir":"Changelog","previous_headings":"","what":"Version 1.6.1 (2023-12-05)","title":"Version 1.6.1 (2023-12-05)","text":"add warning label.ellipse() length(label.pos) > 1 fixed label.pos coefplot.mlm() add ellipse.axes() draw axes covariance ellipse add ellipse.box() draw conjugate axes covariance ellipse","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-160-2023-08-30","dir":"Changelog","previous_headings":"","what":"Version 1.6.0 (2023-08-30)","title":"Version 1.6.0 (2023-08-30)","text":"CRAN release: 2023-09-05 converted pkg roxygen documentation now Suggests: car rather Depends: fix CITATION authors","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-150-2023-05-30","dir":"Changelog","previous_headings":"","what":"Version 1.5.0 (2023-05-30)","title":"Version 1.5.0 (2023-05-30)","text":"covEllipses() gains formula method Internal function ellipsoid() used heplot3d() becomes (experimental) exported function, Ellipsoid()","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-14-3-2023-01-02","dir":"Changelog","previous_headings":"","what":"Version 1.4-3 (2023-01-02)","title":"Version 1.4-3 (2023-01-02)","text":"replace rgl.pop() pop3D (PR #7); thx: D. Murdoch","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-14-2-2022-10-09","dir":"Changelog","previous_headings":"","what":"Version 1.4-2 (2022-10-09)","title":"Version 1.4-2 (2022-10-09)","text":"CRAN release: 2022-10-19 Fix CITATION","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-14-1-2022-10-01","dir":"Changelog","previous_headings":"","what":"Version 1.4-1 (2022-10-01)","title":"Version 1.4-1 (2022-10-01)","text":"CRAN release: 2022-10-01 (Ugh) broom becomes Depend: override broom::glance()","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-14-0-2022-09-26","dir":"Changelog","previous_headings":"","what":"Version 1.4-0 (2022-09-26)","title":"Version 1.4-0 (2022-09-26)","text":"Added Iwasaki_Big_Five data [Thx: James Grice] Added cex.label arg heplot3d() Convert old Rnw vignettes Rmd Fix documentation infelicities Added TIPI data Added glance.mlm() extension broom::glance.lm()","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-9-2021-10-06","dir":"Changelog","previous_headings":"","what":"Version 1.3-9 (2021-10-06)","title":"Version 1.3-9 (2021-10-06)","text":"CRAN release: 2021-10-06 Fix potential problem URL links JSS articles, now converted DOIs","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-8","dir":"Changelog","previous_headings":"","what":"Version 1.3-8","title":"Version 1.3-8","text":"CRAN release: 2021-01-21 fix CRAN nit re rgl examples","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-7","dir":"Changelog","previous_headings":"","what":"Version 1.3-7","title":"Version 1.3-7","text":"CRAN release: 2020-10-28 Fix rendering 3D heplots [Thx: Duncan Murdoch] Fix URLs","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-6-2019-03-26","dir":"Changelog","previous_headings":"","what":"Version 1.3-6 (2019-03-26)","title":"Version 1.3-6 (2019-03-26)","text":"add mathscore data fix bug etasq.lm() per #1 [thx: Phil Chalmers] bump pkg version remove Suggests: FRB","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-5-2018-04-02","dir":"Changelog","previous_headings":"","what":"Version 1.3-5 (2018-04-02)","title":"Version 1.3-5 (2018-04-02)","text":"CRAN release: 2018-04-03 fix references car datasets -> carData fix error resulting car 3.0 changes bump pkg version","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-4-2016-11-7","dir":"Changelog","previous_headings":"","what":"Version 1.3-4 (2016-11-7)","title":"Version 1.3-4 (2016-11-7)","text":"CRAN release: 2017-09-15 Added Diabetes data, nice example heterogeneity covariances","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-3-2016-10-21","dir":"Changelog","previous_headings":"","what":"Version 1.3-3 (2016-10-21)","title":"Version 1.3-3 (2016-10-21)","text":"CRAN release: 2016-10-21 Added Parenting data, simple one-way MANOVA design (used TQMP paper) Prepare CRAN release","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-1-2016-06-10","dir":"Changelog","previous_headings":"","what":"Version 1.3-1 (2016-06-10)","title":"Version 1.3-1 (2016-06-10)","text":"CRAN release: 2016-06-14 added plot.robmlm(), plot method “robmlm” objects. Currently, plots weights given observations last iteration index plot. Re-built vignettes","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-0-2016-06-03","dir":"Changelog","previous_headings":"","what":"Version 1.3-0 (2016-06-03)","title":"Version 1.3-0 (2016-06-03)","text":"CRAN release: 2016-06-04 cqplot, pch, col, cex can now vectors Bump version, prepare release","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-12-1-2016-05-19","dir":"Changelog","previous_headings":"","what":"Version 1.2-1 (2016-05-19)","title":"Version 1.2-1 (2016-05-19)","text":"coefplot.mlm(), now pass label.pos label.ellipse() added Mahalanobis() classical robust squared distances; handles missing data gracefully provides confidence envelope added SocialCog data [Thx: Leah Hartman] added cqplot() Mahalanobis distances plot method mlm multivariate data","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-12-0-2016-04-27","dir":"Changelog","previous_headings":"","what":"Version 1.2-0 (2016-04-27)","title":"Version 1.2-0 (2016-04-27)","text":"CRAN release: 2016-05-19 covEllipses() extended two variables, giving scatterplot matrix plot plot.boxM() now can plot measures eigenvalues covariance matrices, useful understanding properties test. added bartlettTests() collection univariate Bartlett tests added leveneTests() collection univariate Levene tests added NeuroCog data, simple one-way MANOVA [Thx: Leah Hartman] label.ellipse() now uses much flexible label.pos argument positioning text labels used heplot() friends.","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-11-0-2016-03-03","dir":"Changelog","previous_headings":"","what":"Version 1.1-0 (2016-03-03)","title":"Version 1.1-0 (2016-03-03)","text":"CRAN release: 2016-03-26 Added boXM biotools Fleshed boxM() formula, lm, plot summary methods added plot.boxM() method Added covEllipses() methods plotting (possibly robust) covariance ellipses Added colDevs() utility use multivariate tests. Added data(AddHealth), simple example one-way MANOVA nice views [thx: Russell Warne] summary.boxM() now returns calculated statistics can used construct kinds plots. plot.boxM() gets gplabel argument provide label group factor pairs.mlm() gets var.cex argument control size variable labels Added logdetCI() confidence intervals log determinants covariance matrices (experimental) Now use logdetCI() plot.boxM()","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-16-2015-07-11","dir":"Changelog","previous_headings":"","what":"Version 1.0-16 (2015-07-11)","title":"Version 1.0-16 (2015-07-11)","text":"CRAN release: 2015-07-13 use importsFrom base packages","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-15-2015-04-15","dir":"Changelog","previous_headings":"","what":"Version 1.0-15 (2015-04-15)","title":"Version 1.0-15 (2015-04-15)","text":"CRAN release: 2015-04-18 Fix require -> requireNamespace","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-14-2015-02-15","dir":"Changelog","previous_headings":"","what":"Version 1.0-14 (2015-02-15)","title":"Version 1.0-14 (2015-02-15)","text":"Updated broken urls documentation Removed vcov.mlm exports conform CRAN policies Now use rgl:: rgl functions *3d.R Removed robmlm.default, robmlm.formula exports Imports: rgl","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-12-2014-05-15","dir":"Changelog","previous_headings":"","what":"Version 1.0-12 (2014-05-15)","title":"Version 1.0-12 (2014-05-15)","text":"CRAN release: 2014-07-02 Removed Authors: satisfy CRAN nits Fixed doc Hernior.Rd Now importsFrom(MASS) rather Depends:","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-11-2013-08-20","dir":"Changelog","previous_headings":"","what":"Version 1.0-11 (2013-08-20)","title":"Version 1.0-11 (2013-08-20)","text":"CRAN release: 2013-08-21 Cosmetic changes pass CRAN checks R 3.1.0, revised vcov.mlm() avoid calling summary.mlm() directly fixed long lines .Rd files R 3.0.1 checks removed require() calls MASS & car (Depends:) removed ::: calls car stats","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-10-2013-06-03","dir":"Changelog","previous_headings":"","what":"Version 1.0-10 (2013-06-03)","title":"Version 1.0-10 (2013-06-03)","text":"Added demo/-.R, exploring representations plots","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-9-2013-04-19","dir":"Changelog","previous_headings":"","what":"Version 1.0-9 (2013-04-19)","title":"Version 1.0-9 (2013-04-19)","text":"Added Pottery2 data, extending car::Pottery Fixed heplot3d minimize striated rendering ellipsoids, also modified default colors fill.alpha","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-8-2013-02-22","dir":"Changelog","previous_headings":"","what":"Version 1.0-8 (2013-02-22)","title":"Version 1.0-8 (2013-02-22)","text":"CRAN release: 2013-04-11 heplot.mlm(), added … label.ellipse able pass cex= Added NLSY data examples testing linearHypotheses heplot3d(), rgl.* functions replaced *3d() equivalents Extended gsorth description examples","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-7-2013-02-07","dir":"Changelog","previous_headings":"","what":"Version 1.0-7 (2013-02-07)","title":"Version 1.0-7 (2013-02-07)","text":"CRAN release: 2013-02-08 Made heplot3d() examples reduce example execution time satisfy CRAN nits","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-6-2013-01-14","dir":"Changelog","previous_headings":"","what":"Version 1.0-6 (2013-01-14)","title":"Version 1.0-6 (2013-01-14)","text":"Added label.ellipse() general exported function. heplot() gets label.pos= argument allowing flexible labeling, label position specified (bottom, left, top, right center) Added coefplot S3 generic coefplot.mlm method plot ellipses mlm coefficients. generalizes car::confidenceEllipse mlm setting.","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-4-2012-12-29","dir":"Changelog","previous_headings":"","what":"Version 1.0-4 (2012-12-29)","title":"Version 1.0-4 (2012-12-29)","text":"Added interpPlot plotting interpolations two data sets, data ellipses, etc. Main use animated demos multivariate statistical concepts. interpPlot gains add=, points= col= arguments greater control graphical parameters.","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-2-2012-12-05","dir":"Changelog","previous_headings":"","what":"Version 1.0-2 (2012-12-05)","title":"Version 1.0-2 (2012-12-05)","text":"CRAN release: 2012-12-17 Added Schooldata example comparison mlm robmlm()","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-1-2012-10-18","dir":"Changelog","previous_headings":"","what":"Version 1.0-1 (2012-10-18)","title":"Version 1.0-1 (2012-10-18)","text":"Added simple robmlm methods robust MLMss print summary methods vcov.mlm method. allows heplot() related methods show robust plots.","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-0-2012-6-3","dir":"Changelog","previous_headings":"","what":"Version 1.0-0 (2012-6-3)","title":"Version 1.0-0 (2012-6-3)","text":"CRAN release: 2012-08-08 Added Olso data Corrected error demo/OBK.R","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-13-2012-5-18","dir":"Changelog","previous_headings":"","what":"Version 0.9-13 (2012-5-18)","title":"Version 0.9-13 (2012-5-18)","text":"Extended -examples vignette example based SocGrades data","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-12-2012-04-03","dir":"Changelog","previous_headings":"","what":"Version 0.9-12 (2012-04-03)","title":"Version 0.9-12 (2012-04-03)","text":"CRAN release: 2012-05-17 Added Skulls data Extended -examples vignette example based Skulls data Changed default colors heplot() heplot1d() allow global setting options(“heplot.colors”); similarly, heplot3d() now allows global option colors, options(“heplot3d.colors”), differing using pink error ellipsoid. Extended Hernior.Rd examples show 1D plots canonical space; added discussion example -examples vignette. Extended SocGrades.Rd examples show plots canonical space.","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-11-2012-01-12","dir":"Changelog","previous_headings":"","what":"Version 0.9-11 (2012-01-12)","title":"Version 0.9-11 (2012-01-12)","text":"CRAN release: 2012-02-12 Added Probe1, Probe2 data sets– repeated measures design Added Sake data","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-10-2011-09-12","dir":"Changelog","previous_headings":"","what":"Version 0.9-10 (2011-09-12)","title":"Version 0.9-10 (2011-09-12)","text":"CRAN release: 2011-10-17 Fixed Authors@R DESCRIPTION R 2.14.x Added var.labels argument pairs.mlm gsorth.R: Made sd() local function avoid deprecated warnings","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-9-2011-06-10","dir":"Changelog","previous_headings":"","what":"Version 0.9-9 (2011-06-10)","title":"Version 0.9-9 (2011-06-10)","text":"Added data(Hernior), another MMRA, cancorr example data set Added data(SocGrades), another MANOVA, MMRA, cancorr example data set Corrected buglet fill.alpha heplot","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-8-2011-04-8","dir":"Changelog","previous_headings":"","what":"Version 0.9-8 (2011-04-8)","title":"Version 0.9-8 (2011-04-8)","text":"CRAN release: 2011-05-21 Added MMRA example -examples vignette Added err.label argument heplot heplot3d allow changing label error ellipsoid","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-7-2010-11-4","dir":"Changelog","previous_headings":"","what":"Version 0.9-7 (2010-11-4)","title":"Version 0.9-7 (2010-11-4)","text":"o Added trans.colors() make colors transparent o Modifications heplot() filled ellipses: added fill= fill.alpha= arguments; replaced lines() polygon() H E ellipses; calculate H.rank distinguish degenerate ellipses o added last() utility.R o Modified examples show fill=TRUE use wire=FALSE heplot3d() o Modified pairs.mlm() pass fill= fill.alpha= heplot() o Updated reference URLs point datavis.ca o Fixed buglet gsorth matrix row/col names [Thx: mekki@mektek.ca] o Fixed buglet etasq.lm partial=FALSE [Thx: .e.holliday@aston.ac.uk] Version 0.9-6 (2010-11-2) o added CITATION JSS article references .Rd files o modified repeated vignette [nojss] Version 0.9-5 (2010-10-01) o Added repeated vignette Version 0.9-4 (2010-07-29) o Minor documentation changes o Added etasq.lm() method o Added data/MockJury - 1-way 2-way MANOVA, step-tests, ANCOVA o Generalized termMeans() exported o Added -examples vignette Version 0.9-3 (2010-07-27) o Added gsorth() Gram-Schmidt orthogonalization matrix data frame, preserving column means standard deviations o Avoid Deprecated warnings (linear.hypothesis) car2 o Fixed documentation warnings car2 (linear.hypothesis, data.ellipse) Version 0.9-2 (2010-02-12) o Added demo/Big5.R - Analysis scores ‘Big 5’ personality traits three groups o fixed buglet text3d causing rgl crash (thx: Duncan Murdoch) o switched inst/CHANGES NEWS o Added data/RatWeight examples - repeated measures Weight Gain Rats o Added data/Headache examples - repeated measures treatment headaches o Fixed buglets heplot, heplot1d, heplot3d regarding number variables o Added etasq.mlm methods multivariate measures association (^2) o Return ellipse radius heplot, heplot3d","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-1-2010-01-1","dir":"Changelog","previous_headings":"","what":"Version 0.9-1 (2010-01-1)","title":"Version 0.9-1 (2010-01-1)","text":"o heplot.mlm, pairs.mlm, heplot3d.mlm now work repeated measure designs covariates rhs. o Implemented heplot1d() repeated measures designs (untested) o Revised documentation repeated measures o Added center.cex heplot.mlm() o Revised mark.H0() handle 3D plots also o Added Adoption data – MMreg repeated measures o Added ReactTime data – 2 within-S, -S factors o Fixed bug icontrasts o Added markH0 argument heplot o Added label argument mark.H0() o Added arrow3d() o Fixed buglet pairs.mlm (type)","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-0-2009-12-25","dir":"Changelog","previous_headings":"","what":"Version 0.9-0 (2009-12-25)","title":"Version 0.9-0 (2009-12-25)","text":"o Implemented 2D plots heplot.mlm repeated measures designs adding idata=, idesign=, icontrasts= arguments. o imatrix= argument doubly-multivariate designs implemented, depends car 2.0+ o Updated example(OBK) o Updated example(WeightLoss) o Implemented 3D plots heplot3d.mlm repeated measures designs (OK) o Implemented pairs() repeated measures designs (OK)","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-11-2009-12-08","dir":"Changelog","previous_headings":"","what":"Version 0.8-11 (2009-12-08)","title":"Version 0.8-11 (2009-12-08)","text":"CRAN release: 2009-12-23 o Minor fixes heplot1d o Added contrasts example RootStock.Rd o Added WeightLoss data – doubly multivariate o Added mark.H0","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-10-2009-10-10","dir":"Changelog","previous_headings":"","what":"Version 0.8-10 (2009-10-10)","title":"Version 0.8-10 (2009-10-10)","text":"CRAN release: 2009-10-13 o Fixes cross-references .Rd files.","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-9-2009-06-19","dir":"Changelog","previous_headings":"","what":"Version 0.8-9 (2009-06-19)","title":"Version 0.8-9 (2009-06-19)","text":"CRAN release: 2009-07-23 o Added data(RootStock) o heplot.mlm, heplot3d.mlm now include center returned object","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-8-2009-06-04","dir":"Changelog","previous_headings":"","what":"Version 0.8-8 (2009-06-04)","title":"Version 0.8-8 (2009-06-04)","text":"o Added data(FootHead) o Extended example(FootHead) Version 0.8-7 (2009-04-17) o Initial version heplot1d o Added data(Bees), demo(bees.contrasts) o Now suggest: effects package","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-6-2009-04-11","dir":"Changelog","previous_headings":"","what":"Version 0.8-6 (2009-04-11)","title":"Version 0.8-6 (2009-04-11)","text":"CRAN release: 2009-04-19 o Added VocabGrowth data, example heplot() repeated measures design o Fixed label.ellipse heplot.mlm.R center label horizontally o Added demo(OBK) o Added axes= heplot.mlm fix warnings arising axes=FALSE pairs.mlm","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-5-2009-01-26","dir":"Changelog","previous_headings":"","what":"Version 0.8-5 (2009-01-26)","title":"Version 0.8-5 (2009-01-26)","text":"CRAN release: 2009-04-03 o Minor documentation changes Rdoc 2 o Michael Friendly maintainer","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-4-2008-11-17","dir":"Changelog","previous_headings":"","what":"Version 0.8-4 (2008-11-17)","title":"Version 0.8-4 (2008-11-17)","text":"CRAN release: 2008-11-18 o Documentation additions o added CITATION file","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-3-2008-11-6","dir":"Changelog","previous_headings":"","what":"Version 0.8-3 (2008-11-6)","title":"Version 0.8-3 (2008-11-6)","text":"Changes heplot3d.mlm: o added xlim, ylim, zlim arguments","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-2-2008-10-22","dir":"Changelog","previous_headings":"","what":"Version 0.8-2 (2008-10-22)","title":"Version 0.8-2 (2008-10-22)","text":"Package changes o added suggests: candisc o added utility.R, cross3d.R Changes heplot.mlm: o moved lambda.crit utility.R o added .rep handle common task repeating argument values Changes heplot3d.mlm: o added shade=, shade.alpha=, wire= parameters o fixed: grand.mean=FALSE respected o replaced sphere grand.mean cross3d() o color means according color term o return bounding boxes ellipsoids o replaced rgl.texts texts3d Changes utility.R: o Generalized lambda.crit provide Roy.crit HLT.crit; Roy.crit used","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-1-2007-05-23","dir":"Changelog","previous_headings":"","what":"Version 0.8-1 (2007-05-23)","title":"Version 0.8-1 (2007-05-23)","text":"CRAN release: 2008-11-03 o heplot now passes … plot() calls text() points().","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-0-2007-01-31","dir":"Changelog","previous_headings":"","what":"Version 0.8-0 (2007-01-31)","title":"Version 0.8-0 (2007-01-31)","text":"CRAN release: 2007-01-31 Initial version released CRAN.","code":""}] +[{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"multivariate-analysis-of-variance-designs","dir":"Articles","previous_headings":"","what":"Multivariate Analysis of Variance Designs","title":"HE plot MANOVA Examples","text":"vignette provides worked examples analysis multivariate linear models (MLMs) MANOVA designs predictors factors, goal determine group means differ several response variables relation factors possible interactions. Graphical methods visualizing results using heplots candisc packages illustrated. emphasis using methods R, understanding help reveal aspects models might apparent graphical displays. attempt made describe theory MLMs statistical details behind plots reduced-rank canonical cousins. , see Fox, Friendly, & Monette (2009); Friendly (2007); Friendly (2006).","code":""},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"adolescent-mental-health-data","dir":"Articles","previous_headings":"","what":"Adolescent Mental Health Data","title":"HE plot MANOVA Examples","text":"simple example one-way MANOVA design quantitative factor. dataset, AddHealth, contains large cross-sectional sample participants grades 7–12 National Longitudinal Study Adolescent Health, described Warne (2014). contains responses two Likert-scale (1–5) items, anxiety depression. grade ordered factor, means default contrasts taken orthogonal polynomials linear (grade.L), quadratic (grade.Q), 5th degree (grade^5) trends, decompose total effect grade. research questions : means anxiety depression vary separately grade? evidence linear nonlinear trends? anxiety depression vary jointly grade? association anxiety depression vary age? first question can answered fitting separate linear models response (e.g., lm(anxiety ~ grade))). However second question interesting considers two responses together takes correlation account. fit MLM: \\[ \\mathbf{y} = \\boldsymbol{\\beta}_0 + \\boldsymbol{\\beta}_1 x + \\boldsymbol{\\beta}_2 x^2 + \\cdots \\boldsymbol{\\beta}_5 x^5 \\tag{1.1} \\] , \\[ \\begin{eqnarray*} \\begin{bmatrix} y_{\\text{anx}} \\\\y_{\\text{dep}} \\end{bmatrix} & = & \\begin{bmatrix} \\beta_{0,\\text{anx}} \\\\ \\beta_{0,\\text{dep}} \\end{bmatrix} + \\begin{bmatrix} \\beta_{1,\\text{anx}} \\\\ \\beta_{1,\\text{dep}} \\end{bmatrix} \\text{grade} + \\begin{bmatrix} \\beta_{2,\\text{anx}} \\\\ \\beta_{2,\\text{dep}} \\end{bmatrix} \\text{grade}^2 + \\cdots \\begin{bmatrix} \\beta_{5,\\text{anx}} \\\\ \\beta_{5,\\text{dep}} \\end{bmatrix} \\text{grade}^5 \\end{eqnarray*} \\] Using lm() get coefficients polynomial terms grade:","code":"data(AddHealth, package=\"heplots\") str(AddHealth) #> 'data.frame': 4344 obs. of 3 variables: #> $ grade : Ord.factor w/ 6 levels \"7\"<\"8\"<\"9\"<\"10\"<..: 5 4 6 1 2 2 2 3 3 3 ... #> $ depression: int 0 0 0 0 0 0 0 0 1 2 ... #> $ anxiety : int 0 0 0 1 1 0 0 1 1 0 ... lm(cbind(anxiety, depression) ~ grade, data=AddHealth) #> #> Call: #> lm(formula = cbind(anxiety, depression) ~ grade, data = AddHealth) #> #> Coefficients: #> anxiety depression #> (Intercept) 0.94286 1.18437 #> grade.L 0.32072 0.38917 #> grade.Q -0.02662 -0.12256 #> grade.C -0.03979 -0.00952 #> grade^4 -0.02458 -0.04024 #> grade^5 -0.06263 -0.00239"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"exploratory-plots","dir":"Articles","previous_headings":"1 Adolescent Mental Health Data","what":"Exploratory plots","title":"HE plot MANOVA Examples","text":"exploratory analysis useful fitting visualizing models. first step, find means, standard deviations, standard errors means: Now, plot means \\(\\pm 1\\) error bars. appears average level depression anxiety increase steadily grade, except grades 11 12 don’t differ much. Figure 1.1: Means anxiety depression grade, \\(\\pm 1\\) standard error bars. Treating anxiety depression multivariate outcomes, can also plot bivariate means. Figure 1.2: Joint plot means anxiety depression grade, \\(\\pm 1\\) standard error bars. can examine within-group correlations using covEllipses(). variability scores large compared range means, show data ellipses coverage 10%. Figure 1.3: Within-group covariance ellipses grade groups.","code":"library(ggplot2) library(dplyr) library(patchwork) means <- AddHealth |> group_by(grade) |> summarise( n = n(), dep_sd = sd(depression, na.rm = TRUE), anx_sd = sd(anxiety, na.rm = TRUE), dep_se = dep_sd / sqrt(n), anx_se = anx_sd / sqrt(n), depression = mean(depression), anxiety = mean(anxiety) ) |> relocate(depression, anxiety, .after = grade) |> print() #> # A tibble: 6 × 8 #> grade depression anxiety n dep_sd anx_sd dep_se anx_se #> #> 1 7 0.881 0.751 622 1.11 1.05 0.0447 0.0420 #> 2 8 1.08 0.804 664 1.19 1.06 0.0461 0.0411 #> 3 9 1.17 0.934 778 1.19 1.08 0.0426 0.0387 #> 4 10 1.27 0.956 817 1.23 1.11 0.0431 0.0388 #> 5 11 1.37 1.12 790 1.20 1.16 0.0428 0.0411 #> 6 12 1.34 1.10 673 1.14 1.11 0.0439 0.0426 p1 <-ggplot(data = means, aes(x = grade, y = anxiety)) + geom_point(size = 4) + geom_line(aes(group = 1), linewidth = 1.2) + geom_errorbar(aes(ymin = anxiety - anx_se, ymax = anxiety + anx_se), width = .2) + theme_bw(base_size = 15) p2 <-ggplot(data = means, aes(x = grade, y = depression)) + geom_point(size = 4) + geom_line(aes(group = 1), linewidth = 1.2) + geom_errorbar(aes(ymin = depression - dep_se, ymax = depression + dep_se), width = .2) + theme_bw(base_size = 15) p1 + p2 ggplot(data = means, aes(x = anxiety, y = depression, color = grade)) + geom_point(size = 3) + geom_errorbarh(aes(xmin = anxiety - anx_se, xmax = anxiety + anx_se)) + geom_errorbar(aes(ymin = depression - dep_se, ymax = depression + dep_se)) + geom_line(aes(group = 1), linewidth = 1.5) + geom_label(aes(label = grade), nudge_x = -0.015, nudge_y = 0.02) + scale_color_discrete(guide = \"none\") + theme_bw(base_size = 15) covEllipses(AddHealth[, 3:2], group = AddHealth$grade, pooled = FALSE, level = 0.1, center.cex = 2.5, cex = 1.5, cex.lab = 1.5, fill = TRUE, fill.alpha = 0.05)"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"fit-the-mlm","dir":"Articles","previous_headings":"1 Adolescent Mental Health Data","what":"Fit the MLM","title":"HE plot MANOVA Examples","text":"Now, let’s fit MLM responses jointly relation grade. null hypothesis means anxiety depression six grades, \\[ H_0 : \\mathbf{\\mu}_7 = \\mathbf{\\mu}_8 = \\cdots = \\mathbf{\\mu}_{12} \\; , \\] equivalently, coefficients except intercept model (1.1) zero, \\[ H_0 : \\boldsymbol{\\beta}_1 = \\boldsymbol{\\beta}_2 = \\cdots = \\boldsymbol{\\beta}_5 = \\boldsymbol{0} \\; . \\] overall test, 5 degrees freedom diffuse, can rejected pair means differ. car::Anova() gives simple display multivariate test, using Pillai trace criterion. summary() method gives four test statistics.","code":"AH.mlm <- lm(cbind(anxiety, depression) ~ grade, data = AddHealth) # overall test of `grade` Anova(AH.mlm) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> grade 5 0.0224 9.83 10 8676 <2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## show separate multivariate tests summary(Anova(AH.mlm)) |> print(SSP = FALSE) #> #> Type II MANOVA Tests: #> #> ------------------------------------------ #> #> Term: grade #> #> Multivariate Tests: grade #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 5 0.02242 9.8340 10 8676 < 2.2e-16 *** #> Wilks 5 0.97762 9.8726 10 8674 < 2.2e-16 *** #> Hotelling-Lawley 5 0.02286 9.9112 10 8672 < 2.2e-16 *** #> Roy 5 0.02119 18.3878 5 4338 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"testing-linear-hypotheses","dir":"Articles","previous_headings":"1 Adolescent Mental Health Data","what":"Testing linear hypotheses","title":"HE plot MANOVA Examples","text":"Given grade ordered factor, makes sense examine narrower hypotheses linear nonlinear trends. car::linearHypothesis() provides general way , giving multivariate tests one linear combinations coefficients. joint test linear coefficients anxiety depression, \\(H_0 : \\boldsymbol{\\beta}_1 = \\boldsymbol{0}\\) highly significant, test quadratic coefficients \\(H_0 : \\boldsymbol{\\beta}_2 = \\boldsymbol{0}\\) indicates significant curvature trends across grade, saw plots means, Figures 1.1 1.2. can also test hypothesis higher order terms beyond quadratic zero, H_0 : _3 = _4 = _5 = $:","code":"## linear effect linearHypothesis(AH.mlm, \"grade.L\") |> print(SSP = FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.01921 42.479 2 4337 < 2.2e-16 *** #> Wilks 1 0.98079 42.479 2 4337 < 2.2e-16 *** #> Hotelling-Lawley 1 0.01959 42.479 2 4337 < 2.2e-16 *** #> Roy 1 0.01959 42.479 2 4337 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## quadratic effect linearHypothesis(AH.mlm, \"grade.Q\") |> print(SSP = FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.00195 4.2421 2 4337 0.01444 * #> Wilks 1 0.99805 4.2421 2 4337 0.01444 * #> Hotelling-Lawley 1 0.00196 4.2421 2 4337 0.01444 * #> Roy 1 0.00196 4.2421 2 4337 0.01444 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## joint test of all higher terms linearHypothesis(AH.mlm, rownames(coef(AH.mlm))[3:5]) |> print(SSP = FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 3 0.00235 1.7021 6 8676 0.11612 #> Wilks 3 0.99765 1.7023 6 8674 0.11608 #> Hotelling-Lawley 3 0.00236 1.7025 6 8672 0.11604 #> Roy 3 0.00206 2.9797 3 4338 0.03022 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"he-plot","dir":"Articles","previous_headings":"1 Adolescent Mental Health Data","what":"HE plot","title":"HE plot MANOVA Examples","text":"Figure 1.4 shows plot problem. H ellipse grade effect reflects increasing pattern means across grades: depression increases along anxiety. error E ellipse reflects pooled -group covariance, weighted average shown @ref{fig-addhealth-covellipse}. can include linear hypotheses contrasts using hypotheses argument. H ellipses 1 df linear quadratic terms plot lines. linear effect corresponds major axis H ellipse grade effect. , preserve resolution plot, show H E ellipses 10% coverage, relative size H ellipse relative E matters: default significance scaling, effect significant iff corresponding H ellipse projects anywhere outside E ellipse. Figure 1.4: plot multivariate model AH.mlm, showing overall effect grade well tests linear quadratic terms model.","code":"heplot(AH.mlm, hypotheses = c(\"grade.L\", \"grade.Q\"), hyp.labels = c(\"linear\", \"quad\"), label.pos = c(4, 3, 1, 1), fill=c(TRUE, FALSE), level = 0.1, cex.lab = 1.5)"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"plastic-film-data","dir":"Articles","previous_headings":"","what":"Plastic film data","title":"HE plot MANOVA Examples","text":"experiment conducted determine optimum conditions extruding plastic film. Three responses, tear resistance, film gloss film opacity measured relation two factors, rate extrusion amount additive, set two values, High Low. data set comes Johnson & Wichern (1992). design thus \\(2\\times 2\\) MANOVA, \\(n=5\\) per cell 3 numeric response variables. effects factors responses likely correlated, useful consider multivariate analysis, rather 3 separate univariate ones. example illustrates: 2D 3D plots, difference “effect” scaling “evidence” (significance) scaling, visualizing composite linear hypotheses.","code":"data(Plastic, package=\"heplots\") str(Plastic) #> 'data.frame': 20 obs. of 5 variables: #> $ tear : num 6.5 6.2 5.8 6.5 6.5 6.9 7.2 6.9 6.1 6.3 ... #> $ gloss : num 9.5 9.9 9.6 9.6 9.2 9.1 10 9.9 9.5 9.4 ... #> $ opacity : num 4.4 6.4 3 4.1 0.8 5.7 2 3.9 1.9 5.7 ... #> $ rate : Factor w/ 2 levels \"Low\",\"High\": 1 1 1 1 1 1 1 1 1 1 ... #> $ additive: Factor w/ 2 levels \"Low\",\"High\": 1 1 1 1 1 2 2 2 2 2 ..."},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"multivariate-tests","dir":"Articles","previous_headings":"2 Plastic film data","what":"Multivariate tests","title":"HE plot MANOVA Examples","text":"begin overall MANOVA two-way MANOVA model. analyses, use car::Anova() significance tests rather stats::anova(), provides -called “Type ” (sequential) tests terms linear models. example, effect 1 df, multivariate statistics (Roy’s maximum root test, Pillai Hotelling trace criteria, Wilks’ Lambda) equivalent, give \\(F\\) statistics \\(p\\)-values. specify test.statistic=\"Roy\" emphasize Roy’s test natural visual interpretation plots. three responses jointly, main effects rate additive significant, interaction . approaches testing effects multivariate linear models (MLMs), significant multivariate tests often followed univariate tests responses separately determine responses contribute significant effect. R, univariate analyses conveniently performed using update() method mlm object plastic.mod, re-fits model single outcome variable. results show significant main effects tear, significant main effect rate gloss, significant effects opacity, don’t shed light nature effects. Traditional univariate plots means variable separately useful, don’t allow visualization relations among response variables.","code":"plastic.mod <- lm(cbind(tear, gloss, opacity) ~ rate*additive, data=Plastic) Anova(plastic.mod, test.statistic=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> rate 1 1.619 7.55 3 14 0.003 ** #> additive 1 0.912 4.26 3 14 0.025 * #> rate:additive 1 0.287 1.34 3 14 0.302 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Anova(update(plastic.mod, tear ~ .)) #> Anova Table (Type II tests) #> #> Response: tear #> Sum Sq Df F value Pr(>F) #> rate 1.74 1 15.8 0.0011 ** #> additive 0.76 1 6.9 0.0183 * #> rate:additive 0.00 1 0.0 0.9471 #> Residuals 1.76 16 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Anova(update(plastic.mod, gloss ~ .)) #> Anova Table (Type II tests) #> #> Response: gloss #> Sum Sq Df F value Pr(>F) #> rate 1.301 1 7.92 0.012 * #> additive 0.612 1 3.73 0.071 . #> rate:additive 0.544 1 3.32 0.087 . #> Residuals 2.628 16 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Anova(update(plastic.mod, opacity ~ .)) #> Anova Table (Type II tests) #> #> Response: opacity #> Sum Sq Df F value Pr(>F) #> rate 0.4 1 0.10 0.75 #> additive 4.9 1 1.21 0.29 #> rate:additive 4.0 1 0.98 0.34 #> Residuals 64.9 16"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"he-plots","dir":"Articles","previous_headings":"2 Plastic film data","what":"HE plots","title":"HE plot MANOVA Examples","text":"can visualize effects pairs variables plot, showing “size” orientation hypothesis variation (\\(\\mathbf{H}\\)) relation error variation (\\(\\mathbf{E}\\)) ellipsoids. , , model terms 1 degree freedom, \\(\\mathbf{H}\\) ellipsoids degenerate line. plots, \\(\\mathbf{H}\\) ellipses can scaled relative \\(\\mathbf{E}\\) show significance effects (size=\"evidence\"), effect size (size=\"effect\"). former case, model term significant (using Roy’s maximum root test) iff \\(\\mathbf{H}\\) projects anywhere outside \\(\\mathbf{E}\\) ellipse. plot overlays scaling, using thicker lines effect scaling. Figure 2.1: plot effects tear gloss according factors rate, additive interaction, rate:additive. thicker lines show effect size scaling; thinner lines show significance scaling. interpretation can easily read plot, least two response variables (tear gloss) shown bivariate view. effect rate extrusion highly significant: high rate shows greater tear compared low rate. effect amount additive significant view, high level additive greater tear gloss. effect scaling, \\(\\mathbf{H}\\) \\(\\mathbf{E}\\) sums squares products matrices divided error df, giving multivariate analogs univariate measures effect size, e.g., \\((\\bar{y}_1-\\bar{y}_2) / s\\). significance scaling, \\(\\mathbf{H}\\) ellipse divided \\(\\lambda_\\alpha\\), critical value Roy’s largest root statistic. scaling property \\(\\mathbf{H}\\) ellipse protrude somewhere outside \\(\\mathbf{E}\\) ellipse iff multivariate test significant level \\(\\alpha\\). Figure 2.2 shows scalings, using thinner line significance scaling. Note (degenerate) ellipse additive significant, protrude outside \\(\\mathbf{E}\\) ellipse view. guaranteed protrude somewhere 3D space responses. design, means levels interaction terms shown plot, general can lead messy displays. can add term rate:additive follows: Figure 2.2: plot effects tear gloss according factors rate, additive interaction, rate:additive. Annotations added means combinations rate additive. factor means plot (Figure 2.2 simple interpretation: high rate level yields greater tear resistance lower gloss low level. high additive amount produces greater tear resistance greater gloss. rate:additive interaction significant overall, though approaches significance gloss. cell means combinations rate additive shown figure suggest explanation, tutorial purposes: low level rate, little difference gloss levels additive. high level rate, larger difference gloss. \\(\\mathbf{H}\\) ellipse interaction rate:additive therefore “points” direction gloss indicating variable contributes interaction multivariate tests. MANOVA models, interest test sub-hypotheses given main effect interaction, conversely test composite hypotheses pool together certain effects test jointly. tests (, indeed, tests terms given model) carried tests general linear hypotheses MLM. example, might useful test two composite hypotheses: one corresponding main effects jointly, another corresponding difference among means four groups (equivalent joint test overall model). tests specified terms subsets linear combinations model parameters. Thus, example, joint test main effects tests parameters rateHigh additiveHigh. Correspondingly, can display tests plot specifying tests hypothesis argument heplot(), shown Figure 2.3. Figure 2.3: plot tear gloss, supplemented ellipses representing joint tests main effects group differences Finally, 3D plot can produced heplot3d(), giving Figure 2.4. plot rotated interactively view shows main effects protruding outside error ellipsoid. Figure 2.4: 3D plot plastic MLM","code":"## Compare evidence and effect scaling colors = c(\"red\", \"darkblue\", \"darkgreen\", \"brown\") heplot(plastic.mod, size=\"evidence\", col=colors, cex=1.25, fill=TRUE, fill.alpha=0.1) heplot(plastic.mod, size=\"effect\", add=TRUE, lwd=5, term.labels=FALSE, col=colors) # Compare evidence and effect scaling colors = c(\"red\", \"darkblue\", \"darkgreen\", \"brown\") heplot(plastic.mod, size=\"evidence\", col=colors, cex=1.25, fill=TRUE, fill.alpha=0.05) heplot(plastic.mod, size=\"effect\", add=TRUE, lwd=5, term.labels=FALSE, col=colors) ## add interaction means intMeans <- termMeans(plastic.mod, 'rate:additive', abbrev.levels=2) points(intMeans[,1], intMeans[,2], pch=18, cex=1.2, col=\"brown\") text(intMeans[,1], intMeans[,2], rownames(intMeans), adj=c(0.5, 1), col=\"brown\") lines(intMeans[c(1,3),1], intMeans[c(1,3),2], col=\"brown\") lines(intMeans[c(2,4),1], intMeans[c(2,4),2], col=\"brown\") plastic.mod #> #> Call: #> lm(formula = cbind(tear, gloss, opacity) ~ rate * additive, data = Plastic) #> #> Coefficients: #> tear gloss opacity #> (Intercept) 6.30 9.56 3.74 #> rateHigh 0.58 -0.84 -0.60 #> additiveHigh 0.38 0.02 0.10 #> rateHigh:additiveHigh 0.02 0.66 1.78 linearHypothesis(plastic.mod, c(\"rateHigh\", \"additiveHigh\"), title=\"Main effects\") |> print(SSP=FALSE) #> #> Multivariate Tests: Main effects #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 0.71161 2.7616 6 30 0.029394 * #> Wilks 2 0.37410 2.9632 6 28 0.022839 * #> Hotelling-Lawley 2 1.44400 3.1287 6 26 0.019176 * #> Roy 2 1.26253 6.3127 3 15 0.005542 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 linearHypothesis(plastic.mod, c(\"rateHigh\", \"additiveHigh\", \"rateHigh:additiveHigh\"), title=\"Groups\") |> print(SSP=FALSE) #> #> Multivariate Tests: Groups #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 3 1.14560 3.2948 9 48.000 0.003350 ** #> Wilks 3 0.17802 3.9252 9 34.223 0.001663 ** #> Hotelling-Lawley 3 2.81752 3.9654 9 38.000 0.001245 ** #> Roy 3 1.86960 9.9712 3 16.000 0.000603 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(plastic.mod, hypotheses=list(\"Group\" = c(\"rateHigh\", \"additiveHigh\", \"rateHigh:additiveHigh \")), col=c(colors, \"purple\"), fill = TRUE, fill.alpha = 0.1, lwd=c(2, 3, 3, 3, 2), cex=1.25) heplot(plastic.mod, hypotheses=list(\"Main effects\" = c(\"rateHigh\", \"additiveHigh\")), add=TRUE, col=c(colors, \"darkgreen\"), cex=1.25) colors = c(\"pink\", \"darkblue\", \"darkgreen\", \"brown\") heplot3d(plastic.mod, col=colors)"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"effects-of-physical-attractiveness-on-mock-jury-decisions","dir":"Articles","previous_headings":"","what":"Effects of physical attractiveness on mock jury decisions","title":"HE plot MANOVA Examples","text":"social psychology study influences jury decisions Plaster (1989), male participants (prison inmates) shown picture one three young women. Pilot work indicated one woman beautiful, another average physical attractiveness, third unattractive. Participants rated woman saw twelve attributes scales 1–9. measures used check manipulation “attractiveness” photo. participants told person photo committed Crime, asked rate seriousness crime recommend prison sentence, Years. data contained data frame MockJury.1 Sample sizes roughly balanced independent variables three conditions attractiveness photo, combinations Crime: main questions interest : attractiveness “defendant” influence sentence perceived seriousness crime? attractiveness interact nature crime?","code":"data(MockJury, package = \"heplots\") str(MockJury) #> 'data.frame': 114 obs. of 17 variables: #> $ Attr : Factor w/ 3 levels \"Beautiful\",\"Average\",..: 1 1 1 1 1 1 1 1 1 1 ... #> $ Crime : Factor w/ 2 levels \"Burglary\",\"Swindle\": 1 1 1 1 1 1 1 1 1 1 ... #> $ Years : int 10 3 5 1 7 7 3 7 2 3 ... #> $ Serious : int 8 8 5 3 9 9 4 4 5 2 ... #> $ exciting : int 6 9 3 3 1 1 5 4 4 6 ... #> $ calm : int 9 5 4 6 1 5 6 9 8 8 ... #> $ independent : int 9 9 6 9 5 7 7 2 8 7 ... #> $ sincere : int 8 3 3 8 1 5 6 9 7 5 ... #> $ warm : int 5 5 6 8 8 8 7 6 1 7 ... #> $ phyattr : int 9 9 7 9 8 8 8 5 9 8 ... #> $ sociable : int 9 9 4 9 9 9 7 2 1 9 ... #> $ kind : int 9 4 2 9 4 5 5 9 5 7 ... #> $ intelligent : int 6 9 4 9 7 8 7 9 9 9 ... #> $ strong : int 9 5 5 9 9 9 5 2 7 5 ... #> $ sophisticated: int 9 5 4 9 9 9 6 2 7 6 ... #> $ happy : int 5 5 5 9 8 9 5 2 6 8 ... #> $ ownPA : int 9 7 5 9 7 9 6 5 3 6 ... table(MockJury$Attr) #> #> Beautiful Average Unattractive #> 39 38 37 table(MockJury$Attr, MockJury$Crime) #> #> Burglary Swindle #> Beautiful 21 18 #> Average 18 20 #> Unattractive 20 17"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"manipulation-check","dir":"Articles","previous_headings":"3 Effects of physical attractiveness on mock jury decisions","what":"Manipulation check","title":"HE plot MANOVA Examples","text":"first, check manipulation attractiveness, try assess ratings photos relation presumed categories independent variable Attr. questions : ratings photos physical attractiveness (phyattr) confirm original classification? ratings differentiate photos? keep things simple, consider ratings one-way MANOVA. Note Beautiful baseline category Attr, intercept term gives means level. see means significantly different four variables collectively, joint multivariate test. traditional analysis might follow univariate ANOVAs measure separately. aid interpretation MANOVA results can examine test Attr model plot pairs variables, e.g., phyattr happy (Figure 3.1). means plot show Beautiful rated higher physical attractiveness two photos, Unattractive rated less happy two. Comparing sizes ellipses, differences among group means physical attractiveness contributes significance ratings happy. Figure 3.1: plot ratings phyattr happy according classification photos Attr function pairs.mlm() produces pairwise plots. plot (Figure 3.2) shows means happy independent highly correlated, means phyattr sophisticated. pairwise plots, means form triangle rather line, suggesting attributes indeed measuring different aspects photos. Figure 3.2: plots pairs ratings according classification photos Attr 3 groups 4 variables, \\(\\mathbf{H}\\) ellipsoid \\(s=\\min(df_h, p)=2\\) dimensions. candisc() carries canonical discriminant analysis MLM returns object can used show plot space canonical dimensions. plotted Figure 3.3. heplot.candisc() plot method candisc objects Figure 3.3: Canonical discriminant plot MockJury data. Variable vectors show correlations predictors canonical dimensions. plot, variable vectors determined canonical structure coefficients represent correlations predictor variables canonical variables. Thus, angle near zero axis represents correlation close 1.0; angle near 90\\(^o\\) represent correlation close 0.0. (axes must scaled equal unit lengths angles interpretable.) lengths arrows scaled roughly fill plot, relative length represents overall strength relation variable canonical dimensions. Points represent means canonical scores two dimensions three groups photos. can see 91% variation among group means accounted first dimension, nearly completely aligned phyattr. second dimension, accounting remaining 9% determined nearly entirely ratings happy independent. display gives relatively simple account results MANOVA relations ratings discrimination among photos.","code":"(jury.mod1 <- lm( cbind(phyattr, happy, independent, sophisticated) ~ Attr, data=MockJury)) #> #> Call: #> lm(formula = cbind(phyattr, happy, independent, sophisticated) ~ #> Attr, data = MockJury) #> #> Coefficients: #> phyattr happy independent sophisticated #> (Intercept) 8.282 5.359 6.410 6.077 #> AttrAverage -4.808 0.430 0.537 -1.340 #> AttrUnattractive -5.390 -1.359 -1.410 -1.753 Anova(jury.mod1, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Attr 2 1.77 48.2 4 109 <2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(jury.mod1, main=\"HE plot for manipulation check\", fill = TRUE, fill.alpha = 0.1) pairs(jury.mod1) jury.can <- candisc(jury.mod1) jury.can #> #> Canonical Discriminant Analysis for Attr: #> #> CanRsq Eigenvalue Difference Percent Cumulative #> 1 0.639 1.767 1.6 91.33 91.3 #> 2 0.144 0.168 1.6 8.67 100.0 #> #> Test of H0: The canonical correlations in the #> current row and all that follow are zero #> #> LR test stat approx F numDF denDF Pr(> F) #> 1 0.309 21.53 8 216 < 2e-16 *** #> 2 0.856 6.09 3 109 0.00072 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(jury.can, rev.axes = TRUE, fill = c(TRUE,FALSE), prefix=\"Canonical dimension\", main=\"Canonical HE plot\") #> Vector scale factor set to 8.8177"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"main-analysis","dir":"Articles","previous_headings":"3 Effects of physical attractiveness on mock jury decisions","what":"Main analysis","title":"HE plot MANOVA Examples","text":"Proceeding main questions interest, carry two-way MANOVA responses Years Serious relation independent variables Attr Crime. see nearly significant interaction Attr Crime strong effect Attr. Figure 3.4: plot two-way MANOVA Years Serious plot shows nearly significant interaction Attr:Crime mainly terms differences among groups response Years sentence, little contribution Serious. explore interaction bit detail . main effect Attr also dominated differences among groups Years. assume Years sentence main outcome interest, also makes sense carry step-test variable , controlling rating seriousness (Serious) crime. model jury.mod3 equivalent ANCOVA Years. Thus, even adjusting Serious rating, still significant main effect Attr photo, also hint interaction Attr Crime. coefficient Serious indicates participants awarded 0.84 additional years sentence 1 unit step scale seriousness crime. particularly useful method visualizing fitted effects univariate response models provided effects. default allEffects() calculates predicted values high-order terms given model, plot method produces plots values term. statements produce Figure 3.5. Figure 3.5: Effect plots Serious Attr * Crime interaction ANCOVA model jury.mod3. effect plot Serious shows expected linear relation variable Years. greater interest nature possible interaction Attr Crime Years sentence, controlling Serious. effect plot shows crime Swindle, much greater Years sentence awarded Unattractive defendants.","code":"# influence of Attr of photo and nature of crime on Serious and Years jury.mod2 <- lm( cbind(Serious, Years) ~ Attr * Crime, data=MockJury) Anova(jury.mod2, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Attr 2 0.0756 4.08 2 108 0.020 * #> Crime 1 0.0047 0.25 2 107 0.778 #> Attr:Crime 2 0.0501 2.71 2 108 0.071 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(jury.mod2) # stepdown test (ANCOVA), controlling for Serious jury.mod3 <- lm( Years ~ Serious + Attr * Crime, data=MockJury) t(coef(jury.mod3)) #> (Intercept) Serious AttrAverage AttrUnattractive CrimeSwindle #> [1,] 0.011612 0.83711 0.39586 0.60285 -0.26302 #> AttrAverage:CrimeSwindle AttrUnattractive:CrimeSwindle #> [1,] -0.53701 2.5123 Anova(jury.mod3) #> Anova Table (Type II tests) #> #> Response: Years #> Sum Sq Df F value Pr(>F) #> Serious 379 1 41.14 3.9e-09 *** #> Attr 74 2 4.02 0.021 * #> Crime 4 1 0.43 0.516 #> Attr:Crime 49 2 2.67 0.074 . #> Residuals 987 107 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 library(effects) jury.eff <- allEffects(jury.mod3) plot(jury.eff, ask=FALSE)"},{"path":"https://friendly.github.io/heplots/articles/HE_manova.html","id":"egyptian-skulls-from-five-epochs","dir":"Articles","previous_headings":"","what":"Egyptian skulls from five epochs","title":"HE plot MANOVA Examples","text":"example examines physical measurements size shape made 150 Egyptian skulls five epochs ranging 4000 BC 150 AD. measures : maximal breadth (mb), basibregmatic height (bh), basialiveolar length (bl), nasal height (nh) skull. See Figure 4.1 diagram. question interest whether measurements change time. Systematic changes time interest indicate interbreeding immigrant populations. Figure 4.1: Diagram skull measurements. Maximal breadth basibregmatic height basic measures “size” skull. Basialveolar length nasal height important anthropometric measures “shape”. Note epoch ordered factor, default contrasts orthogonal polynomials. assumes epoch values equally spaced, . However, examining linear quadratic trends useful first approximation. ease labeling various outputs, useful trim epoch values assign meaningful variable labels. start simple displays means epoch. numbers, means don’t seem vary much. pairs plot, Figure 4.2, joining points epoch somewhat revealing bivariate relations among means. Figure 4.2: Pairs plot means Skulls data, epoch. Perhaps better visualizing trends time set boxplots, joining means epoch. Using bwplot() lattice package requires reshaping data wide long format. following code produces Figure 4.3. Figure 4.3: Boxplots Skulls data, epoch, variable. trend lines aren’t linear, neither random, something systematic going ! Now, fit MANOVA model, test effect epoch car::Anova(). see multivariate means differ substantially. Perhaps greater interest focused tests trends time. based tests coefficients model sk.mod jointly equal zero, subsets (polynomial) contrasts epoch. use linearHypothesis() multivariate test epoch.L linear effect. linear trend highly significant. obvious Figure 4.2 maximal breadth nasal increasing time, two measurements negative slopes. linearHypothesis() can also used test composite hypotheses. test non-linear coefficients jointly. result indicates , collectively, non-linear terms significantly different zero. , plots can show patterns tests multivariate hypotheses. four response variables, easiest look pairwise plots pairs.mlm() function. statement produces Figure 4.4. plot, show hypothesis ellipsoids overall effect epoch, well tests just shown linear trend component epoch.L well joint test non-linear terms. Figure 4.4: Pairs plot Skulls data, showing multivariate tests epoch, well tests linear nonlinear trends. plots interesting geometric interpretation: \\(\\mathbf{H}\\) ellipses overall effect epoch representations additive decomposition effect \\(\\mathbf{H}\\) ellipses linear nonlinear linear hypothesis tests according \\[\\mathbf{H}_{\\textrm{epoch}} = \\mathbf{H}_{\\textrm{linear}} + \\mathbf{H}_{\\textrm{nonlinear}}\\] linear term rank 1 (plots line), nonlinear term rank 3. panel, can seen large direction \\(\\mathbf{H}_{\\textrm{epoch}}\\) leading significance effect corresponds essentially linear contrast. \\(\\mathbf{H}_{\\textrm{nonlinear}}\\) orthogonal complement \\(\\mathbf{H}_{\\textrm{linear}}\\) space \\(\\mathbf{H}_{\\textrm{epoch}}\\), nowhere protrude beyond boundary \\(\\mathbf{E}\\) ellipsoid.","code":"data(Skulls) str(Skulls) #> 'data.frame': 150 obs. of 5 variables: #> $ epoch: Ord.factor w/ 5 levels \"c4000BC\"<\"c3300BC\"<..: 1 1 1 1 1 1 1 1 1 1 ... #> $ mb : num 131 125 131 119 136 138 139 125 131 134 ... #> $ bh : num 138 131 132 132 143 137 130 136 134 134 ... #> $ bl : num 89 92 99 96 100 89 108 93 102 99 ... #> $ nh : num 49 48 50 44 54 56 48 48 51 51 ... table(Skulls$epoch) #> #> c4000BC c3300BC c1850BC c200BC cAD150 #> 30 30 30 30 30 # make shorter labels for epochs Skulls$epoch <- factor(Skulls$epoch, labels=sub(\"c\",\"\",levels(Skulls$epoch))) # assign better variable labels vlab <- c(\"maxBreadth\", \"basibHeight\", \"basialLength\", \"nasalHeight\") means <- aggregate(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls, FUN=mean)[,-1] rownames(means) <- levels(Skulls$epoch) means #> mb bh bl nh #> 4000BC 131.37 133.60 99.167 50.533 #> 3300BC 132.37 132.70 99.067 50.233 #> 1850BC 134.47 133.80 96.033 50.567 #> 200BC 135.50 132.30 94.533 51.967 #> AD150 136.17 130.33 93.500 51.367 pairs(means, vlab, panel = function(x, y) { text(x, y, levels(Skulls$epoch)) lines(x,y) }) library(lattice) library(reshape2) sklong <- melt(Skulls, id=\"epoch\") bwplot(value ~ epoch | variable, data=sklong, scales=\"free\", ylab=\"Variable value\", xlab=\"Epoch\", strip=strip.custom(factor.levels=paste(vlab, \" (\", levels(sklong$variable), \")\", sep=\"\")), panel = function(x,y, ...) { panel.bwplot(x, y, ...) panel.linejoin(x,y, col=\"red\", ...) }) # fit manova model sk.mod <- lm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) Anova(sk.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> epoch 4 0.353 3.51 16 580 4.7e-06 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 coef(sk.mod) #> mb bh bl nh #> (Intercept) 133.97333 132.54667 96.460000 50.93333 #> epoch.L 4.02663 -2.19251 -5.017481 1.07517 #> epoch.Q -0.46325 -1.26504 -0.089087 0.12472 #> epoch.C -0.46380 -0.78003 1.075174 -0.83273 #> epoch^4 0.34263 0.80479 -0.661360 -0.41833 coef(sk.mod)[\"epoch.L\",] #> mb bh bl nh #> 4.0266 -2.1925 -5.0175 1.0752 print(linearHypothesis(sk.mod, \"epoch.L\"), SSP=FALSE) # linear component #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.29138 14.597 4 142 5.195e-10 *** #> Wilks 1 0.70862 14.597 4 142 5.195e-10 *** #> Hotelling-Lawley 1 0.41119 14.597 4 142 5.195e-10 *** #> Roy 1 0.41119 14.597 4 142 5.195e-10 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 print(linearHypothesis(sk.mod, c(\"epoch.Q\", \"epoch.C\", \"epoch^4\")), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 3 0.06819 0.83726 12 432.00 0.6119 #> Wilks 3 0.93296 0.83263 12 375.99 0.6167 #> Hotelling-Lawley 3 0.07063 0.82791 12 422.00 0.6216 #> Roy 3 0.04519 1.62676 4 144.00 0.1707 pairs(sk.mod, variables=c(1,4,2,3), hypotheses=list(Lin=\"epoch.L\", NonLin=c(\"epoch.Q\", \"epoch.C\", \"epoch^4\")), var.labels=vlab[c(1,4,2,3)])"},{"path":[]},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"multivariate-multiple-regression-designs","dir":"Articles","previous_headings":"","what":"Multivariate Multiple Regression Designs","title":"HE plot MMRA Examples","text":"ideas behind plots extend naturally multivariate multiple regression (MMRA) multivariate analysis covariance (MANCOVA). MMRA designs, \\(\\mathbf{X}\\) matrix contains quantitative predictors, MANCOVA designs, contains mixture factors quantitative predictors (covariates), typically just one “group” factor. MANCOVA case, often subtle difference emphasis: true MANCOVA analyses focus differences among groups defined factors, adjusting (controlling ) quantitative covariates. Analyses concerned homogeneity regression focus quantitative predictors attempt test whether regression relations groups defined factors.","code":""},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"rohwer-data-aptitude-and-achievement","dir":"Articles","previous_headings":"","what":"Rohwer data: Aptitude and achievement","title":"HE plot MMRA Examples","text":"illustrate homogeneity regression flavor, use data study Rohwer (given Timm (1975), Ex. 4.3, 4.7, 4.23) kindergarten children, designed determine well set paired-associate (PA) tasks predicted performance measures achievement: Peabody Picture Vocabulary test (PPVT), student achievement test (SAT), Raven Progressive matrices test (Raven). PA tasks considered measures learning aptitude varied stimuli presented, called named (n), still (s), named still (ns), named action (na), sentence still (ss). Two groups tested: group \\(n=37\\) children low socioeconomic status (SES) school, group \\(n=32\\) high SES children upper-class, white residential school. data data frame Rohwer heplots package:","code":"data(Rohwer) Rohwer |> dplyr::sample_n(6) #> group SES SAT PPVT Raven n s ns na ss #> 31 1 Lo 9 63 11 2 12 5 25 14 #> 7 1 Lo 6 71 21 0 1 20 23 18 #> 18 1 Lo 45 54 10 0 6 6 14 16 #> 17 1 Lo 19 66 13 7 12 21 35 27 #> 50 2 Hi 4 87 14 1 4 14 25 19 #> 59 2 Hi 36 89 15 1 6 15 23 28"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"preliminary-plots","dir":"Articles","previous_headings":"1 Rohwer data: Aptitude and achievement","what":"Preliminary plots","title":"HE plot MMRA Examples","text":"fitting models, usually useful data exploration graphing. multivariate multiple regression data, among helpful plots scatterplots response variable, Y, predictor, X, can get better sense relationships adding linear regression lines, loess smooths enhancements. scatterplot matrix, using graphics::pairs() GGally::ggpairs() easy . However, 3 response variables, 4 predictors group factor (SES), can overwhelming. alternative compose rectangular matrix plots Y variables Xs. turned easy might seem, none pairs() methods allow possibility. trick reshape data wide long format use facets ggplot2 compose pairwise scatterplots desired rectangular matrix format.1 , can use ggplot2 make produce pairwise plots combination x y variables. Using color=SES aesthetic results separate regression line two SES groups produced geom_smooth(). Figure 1.1: Plot matrix response variables (SAT, PPVT Raven) three predictors (n, s, ns). lines show separate linear regressions SES group. plots form framework understanding model fits statistical tests turn now.","code":"library(tidyr) library(dplyr) library(ggplot2) yvars <- c(\"SAT\", \"PPVT\", \"Raven\" ) # outcome variables xvars <- c(\"n\", \"s\", \"ns\", \"na\", \"ss\") # predictors xvars <- c(\"n\", \"s\", \"ns\") # make a smaller example Rohwer_long <- Rohwer %>% dplyr::select(-group, -na, -ss) |> tidyr::pivot_longer(cols = all_of(xvars), names_to = \"xvar\", values_to = \"x\") |> tidyr::pivot_longer(cols = all_of(yvars), names_to = \"yvar\", values_to = \"y\") |> dplyr::mutate(xvar = factor(xvar, levels = xvars), yvar = factor(yvar, levels = yvars)) Rohwer_long #> # A tibble: 621 × 5 #> SES xvar x yvar y #> #> 1 Lo n 1 SAT 49 #> 2 Lo n 1 PPVT 48 #> 3 Lo n 1 Raven 8 #> 4 Lo s 2 SAT 49 #> 5 Lo s 2 PPVT 48 #> 6 Lo s 2 Raven 8 #> 7 Lo ns 6 SAT 49 #> 8 Lo ns 6 PPVT 48 #> 9 Lo ns 6 Raven 8 #> 10 Lo n 5 SAT 47 #> # ℹ 611 more rows ggplot(Rohwer_long, aes(x, y, color = SES, shape = SES)) + geom_jitter(size=1.5) + geom_smooth(method = \"lm\", se = FALSE, formula = y ~ x, size=1.5) + facet_grid(yvar ~ xvar, # plot matrix of Y by X scales = \"free\") + theme_bw(base_size = 16) + theme(legend.position = \"bottom\")"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"separate-models","dir":"Articles","previous_headings":"1 Rohwer data: Aptitude and achievement","what":"Separate models","title":"HE plot MMRA Examples","text":"one approach, might tempted fit separate regression models High Low SES groups. approach generally recommended lacks power (smaller sample sizes group combined analysis) allow hypotheses equality slopes intercepts tested directly. fits separate slopes intercepts two groups, difficult compare coefficients numerically. function heplots::coefplot() makes bit easier, plotting bivariate confidence ellipses coefficients multivariate linear model. problem, three response variables, 95% confidence regions 3D ellipsoids, plot 2D. 3D versions property given predictor significant multivariate test ellipsoid excludes point (0, 0, 0). Figure 1.2: Coefficient plots separate models High Low SES groups Rohwer data. ellipses 95% confidence regions pairs regression coefficients (SAT, PPVT) predictor model. Alternatively, can visualize results multivariate tests predictors plots. make use fact several plots can overlaid using option add=TRUE shown Figure 1.3. Figure 1.3: plot SAT PPVT, showing effects PA predictors High Low SES groups separately can readily see difference means two SES groups (Hi greater scores variables) also appears slopes predictor ellipses shallower High Low group, indicating greater relation SAT score.","code":"rohwer.ses1 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, data=Rohwer, subset=SES==\"Hi\") Anova(rohwer.ses1) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> n 1 0.202 2.02 3 24 0.1376 #> s 1 0.310 3.59 3 24 0.0284 * #> ns 1 0.358 4.46 3 24 0.0126 * #> na 1 0.465 6.96 3 24 0.0016 ** #> ss 1 0.089 0.78 3 24 0.5173 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 rohwer.ses2 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, data=Rohwer, subset=SES==\"Lo\") Anova(rohwer.ses2) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> n 1 0.0384 0.39 3 29 0.764 #> s 1 0.1118 1.22 3 29 0.321 #> ns 1 0.2252 2.81 3 29 0.057 . #> na 1 0.2675 3.53 3 29 0.027 * #> ss 1 0.1390 1.56 3 29 0.220 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 coef(rohwer.ses1) #> SAT PPVT Raven #> (Intercept) -28.4675 39.69709 13.24384 #> n 3.2571 0.06728 0.05935 #> s 2.9966 0.36998 0.49244 #> ns -5.8591 -0.37438 -0.16402 #> na 5.6662 1.52301 0.11898 #> ss -0.6227 0.41016 -0.12116 coef(rohwer.ses2) #> SAT PPVT Raven #> (Intercept) 4.15106 33.00577 11.17338 #> n -0.60887 -0.08057 0.21100 #> s -0.05016 -0.72105 0.06457 #> ns -1.73240 -0.29830 0.21358 #> na 0.49456 1.47042 -0.03732 #> ss 2.24772 0.32396 -0.05214 coefplot(rohwer.ses1, fill=TRUE, cex.label=1.5, cex.lab=1.5) text(-10, 3, \"High SES group\", pos=4, cex=1.4) coefplot(rohwer.ses2, fill=TRUE, cex.label=1.5, cex.lab=1.5) text(-4.7, 2.5, \"Low SES group\", pos=4, cex=1.4) heplot(rohwer.ses1, ylim=c(40,110), # allow more room for 2nd plot col=c(\"red\", \"black\"), fill = TRUE, fill.alpha = 0.1, lwd=2, cex=1.2) heplot(rohwer.ses2, add=TRUE, col=c(\"brown\", \"black\"), grand.mean=TRUE, error.ellipse=TRUE, # not shown by default when add=TRUE fill = TRUE, fill.alpha = 0.1, lwd=2, cex=1.2) # label the groups at their centroid means <- aggregate(cbind(SAT,PPVT)~SES, data=Rohwer, mean) text(means[,2], means[,3], labels=means[,1], pos=3, cex=2, col=\"black\")"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"mancova-model","dir":"Articles","previous_headings":"1 Rohwer data: Aptitude and achievement","what":"MANCOVA model","title":"HE plot MMRA Examples","text":"Alternatively (optimistically), can fit MANCOVA model allows different means two SES groups responses, constrains slopes PA covariates equal. Note , although multivariate tests two covariates (ns na) highly significant, univariate multiple regression tests separate responses [summary(rohwer.mod)] relatively weak. can also test global 5 df hypothesis, \\(\\mathbf{B}=\\mathbf{0}\\), covariates null effects responses linear hypothesis. First, extract names PA tests predictors model. car::linearHypothesis() takes vector names coefficients tested simultaneously. 2D views additive MANCOVA model rohwer.mod overall test covariates produced follows, giving plots Figure 1.4. Figure 1.4: plot SAT PPVT (left) SAT Raven (right) using MANCOVA model. ellipses labeled ‘Regr’ show test overall model, including predictors. positive orientation Regr ellipses shows predicted values three responses positively correlated (SAT PPVT). well, High SES group higher responses Low SES group. Alternatively, pairwise plots among responses drawn using pairs.mlm() function, 3D plot, using heplot3d() shown Figure 1.5. Figure 1.5: 3D plot MANCOVA model fit Rohwer data.","code":"# MANCOVA, assuming equal slopes rohwer.mod <- lm(cbind(SAT, PPVT, Raven) ~ SES + n + s + ns + na + ss, data=Rohwer) Anova(rohwer.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> SES 1 0.379 12.18 3 60 2.5e-06 *** #> n 1 0.040 0.84 3 60 0.4773 #> s 1 0.093 2.04 3 60 0.1173 #> ns 1 0.193 4.78 3 60 0.0047 ** #> na 1 0.231 6.02 3 60 0.0012 ** #> ss 1 0.050 1.05 3 60 0.3770 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 covariates <- c(\"n\", \"s\", \"ns\", \"na\", \"ss\") # or: covariates <- rownames(coef(rohwer.mod))[-(1:2)] Regr <- linearHypothesis(rohwer.mod, covariates) print(Regr, digits=4, SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 5 0.6658 3.537 15 186 2.31e-05 *** #> Wilks 5 0.4418 3.812 15 166 8.28e-06 *** #> Hotelling-Lawley 5 1.0309 4.032 15 176 2.79e-06 *** #> Roy 5 0.7574 9.392 5 62 1.06e-06 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 colors <- c(\"red\", \"blue\", rep(\"black\",5), \"#969696\") heplot(rohwer.mod, col=colors, variables=c(1,2), hypotheses=list(\"Regr\" = covariates), fill = TRUE, fill.alpha = 0.1, cex=1.5, lwd=c(2, rep(3,5), 4), main=\"(SAT, PPVT) in Rohwer MANCOVA model\") heplot(rohwer.mod, col=colors, variables=c(1,3), hypotheses=list(\"Regr\" = covariates), fill = TRUE, fill.alpha = 0.1, cex=1.5, lwd=c(2, rep(3,5), 4), main=\"(SAT, Raven) in Rohwer MANCOVA model\") pairs(rohwer.mod, col=colors, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\")), cex=1.3, lwd=c(2, rep(3,5), 4)) colors <- c(\"pink\", \"blue\", rep(\"black\",5), \"#969696\") heplot3d(rohwer.mod, col=colors, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\")))"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"testing-homogeneity-of-regression","dir":"Articles","previous_headings":"1 Rohwer data: Aptitude and achievement","what":"Testing homogeneity of regression","title":"HE plot MMRA Examples","text":"MANCOVA model, rohwer.mod, relatively simple interpretations (large effect SES, ns na major predictors) test relies assumption homogeneity slopes predictors. can test assumption follows, adding interactions SES covariates: appears weak evidence unequal slopes separate SES: terms. evidence heterogeneity stronger, however, terms tested collectively using linearHypothesis() function: model (rohwer.mod2) similar spirit two models (rohwer.ses1 rohwer.ses2) fit two SES groups separately show Figure 1.3, except model rohwer.mod2 assumes common within-groups error covariance matrix allows overall tests. illustrate model rohwer.mod2, construct plot SAT PPVT shown Figure 1.6. simplify display, show hypothesis ellipses overall effects PA tests baseline high-SES group, single combined ellipse SESLo: interaction terms tested previously, representing differences slopes low high-SES groups. SES “treatment-coded” model, ellipse covariate represents hypothesis slopes covariate zero high-SES baseline category. parameterization, ellipse Slopes represents joint hypothesis slopes covariates differ low-SES group. Figure 1.6: plot SAT PPVT, fitting model rohwer.mod2 allows unequal slopes covariates. Comparing Figure 1.6 heterogeneous slopes model Figure 1.4 (left) homogeneous slopes model, can seen covariates ellipses similar size orientation, reflecting similar evidence respective null hypotheses, effect SES, showing greater performance high-SES group response measures. Somewhat subtle, error ellipse noticeably smaller Figure 1.6, reflecting additional variation accounted differences slopes.","code":"rohwer.mod2 <- lm(cbind(SAT, PPVT, Raven) ~ SES * (n + s + ns + na + ss), data=Rohwer) Anova(rohwer.mod2) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> SES 1 0.391 11.78 3 55 4.5e-06 *** #> n 1 0.079 1.57 3 55 0.20638 #> s 1 0.125 2.62 3 55 0.05952 . #> ns 1 0.254 6.25 3 55 0.00100 *** #> na 1 0.307 8.11 3 55 0.00015 *** #> ss 1 0.060 1.17 3 55 0.32813 #> SES:n 1 0.072 1.43 3 55 0.24417 #> SES:s 1 0.099 2.02 3 55 0.12117 #> SES:ns 1 0.118 2.44 3 55 0.07383 . #> SES:na 1 0.148 3.18 3 55 0.03081 * #> SES:ss 1 0.057 1.12 3 55 0.35094 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (coefs <- rownames(coef(rohwer.mod2))) #> [1] \"(Intercept)\" \"SESLo\" \"n\" \"s\" \"ns\" #> [6] \"na\" \"ss\" \"SESLo:n\" \"SESLo:s\" \"SESLo:ns\" #> [11] \"SESLo:na\" \"SESLo:ss\" print(linearHypothesis(rohwer.mod2, coefs[grep(\":\", coefs)]), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 5 0.4179 1.845 15 171.0 0.03209 * #> Wilks 5 0.6236 1.894 15 152.2 0.02769 * #> Hotelling-Lawley 5 0.5387 1.927 15 161.0 0.02396 * #> Roy 5 0.3846 4.385 5 57.0 0.00191 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 colors <- c(\"red\", \"blue\", rep(\"black\",5), \"#969696\") heplot(rohwer.mod2, col=c(colors, \"brown\"), terms=c(\"SES\", \"n\", \"s\", \"ns\", \"na\", \"ss\"), hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\"), \"Slopes\" = coefs[grep(\":\", coefs)]))"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"recovery-from-hernia-repair","dir":"Articles","previous_headings":"","what":"Recovery from hernia repair","title":"HE plot MMRA Examples","text":"example uses Hernior data (Mosteller & Tukey (1977), Data Exhibit 8, p. 567-568), comprising data measures post-operative recovery 32 patients undergoing elective herniorrhaphy operation, relation pre-operative measures. outcome measures : leave, patient’s condition upon leaving recovery room (1-4 scale, 1=best), nurse, level nursing required one week operation (1-5 scale, 1=worst) los, length stay hospital operation (days) predictor variables : patient age, sex, `pstat, physical status ( 1-5 scale, 1=perfect health, …, 5=poor health), build, body build (1-5 scale, 1=emaciated, …, 5=obese), preoperative complications (cardiac) heart respiration (resp), 1-4 scales, 1=none, …, 4=severe.","code":"data(Hernior) str(Hernior) #> 'data.frame': 32 obs. of 9 variables: #> $ age : int 78 60 68 62 76 76 64 74 68 79 ... #> $ sex : Factor w/ 2 levels \"f\",\"m\": 2 2 2 2 2 2 2 1 2 1 ... #> $ pstat : int 2 2 2 3 3 1 1 2 3 2 ... #> $ build : int 3 3 3 5 4 3 2 3 4 2 ... #> $ cardiac: int 1 2 1 3 3 1 1 2 2 1 ... #> $ resp : int 1 2 1 1 2 1 2 2 1 1 ... #> $ leave : int 2 2 1 1 2 1 1 1 1 2 ... #> $ los : int 9 4 7 35 9 7 5 16 7 11 ... #> $ nurse : num 3 5 4 3 4 5 5 3 5 3 ..."},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"all-predictors-model","dir":"Articles","previous_headings":"2 Recovery from hernia repair","what":"All predictors model","title":"HE plot MMRA Examples","text":"begin model fitting predictors. Note ordinal predictors, pstat, build, cardiac resp arguably treated factors, rather linear, regression terms. give tests nonlinear effects relations responses. ignore possibility example. results multivariate tests somewhat disappointing. physical status predictor (pstat) appears significant conventional levels. univariate models response implicit MLM Hern.mod. can printed using summary(), can use summary() extract certain statistics univariate response model, . conveniently, function heplots::glance.mlm() extends broom::glance.lm() give one-line summary statistics response variable MLM. \\(R^2\\) \\(F\\) statistics overall model assessing impact predictors. Univariate tests predictors models (shown ) hard interpret, largely show significant effects leave variable. Yet, \\(R^2\\) values responses slightly promising. proceed multivariate overall test \\(\\mathbf{B} = 0\\) predictors, whose term names can easily extracted rownames coefficients. Figure 2.1: pairs plot Hernior data pairs() plot MLM gives set plots shown Figure 2.1 helps interpret relations among predictors lead highly significant overall test. Among predictors, age sex small insignificant effects outcome measures jointly. predictors contribute overall test \\(\\mathbf{B} = 0\\), though different ways various responses. example, panel (leave, los) Figure 2.1, can seen pstat individually outside \\(\\mathbf{E}\\) ellipse, build resp contribute overall test opposite direction.","code":"Hern.mod <- lm(cbind(leave, nurse, los) ~ age + sex + pstat + build + cardiac + resp, data=Hernior) Anova(Hern.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> age 1 0.143 1.27 3 23 0.307 #> sex 1 0.026 0.21 3 23 0.892 #> pstat 1 0.333 3.84 3 23 0.023 * #> build 1 0.257 2.65 3 23 0.073 . #> cardiac 1 0.228 2.26 3 23 0.108 #> resp 1 0.248 2.53 3 23 0.082 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Hern.summary <- summary(Hern.mod) unlist(lapply(Hern.summary, function(x) x$r.squared)) #> Response leave Response nurse Response los #> 0.5918 0.2474 0.3653 glance.mlm(Hern.mod) #> # A tibble: 3 × 9 #> response r.squared adj.r.squared sigma fstatistic numdf dendf p.value nobs #> #> 1 leave 0.592 0.494 0.388 6.04 6 25 0.000519 32 #> 2 nurse 0.247 0.0668 0.841 1.37 6 25 0.265 32 #> 3 los 0.365 0.213 5.62 2.40 6 25 0.0573 32 # test overall regression (predictors <- rownames(coef(Hern.mod))[-1]) #> [1] \"age\" \"sexm\" \"pstat\" \"build\" \"cardiac\" \"resp\" Regr <- linearHypothesis(Hern.mod, predictors) print(Regr, digits=5, SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 6 1.10198 2.4192 18 75.000 0.0041356 ** #> Wilks 6 0.21734 2.6046 18 65.539 0.0025239 ** #> Hotelling-Lawley 6 2.26797 2.7300 18 65.000 0.0016285 ** #> Roy 6 1.55434 6.4764 6 25.000 0.0003232 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 clr <- c(\"red\", \"darkgray\", \"blue\", \"darkgreen\", \"magenta\", \"brown\", \"black\") vlab <- c(\"LeaveCondition\\n(leave)\", \"NursingCare\\n(nurse)\", \"LengthOfStay\\n(los)\") hyp <- list(\"Regr\" = predictors) pairs(Hern.mod, hypotheses=hyp, col=clr, var.labels=vlab, fill=c(TRUE,FALSE), fill.alpha = 0.1, cex=1.25)"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"canonical-analysis","dir":"Articles","previous_headings":"2 Recovery from hernia repair","what":"Canonical analysis","title":"HE plot MMRA Examples","text":"multivariate regression example, terms model Hern.mod 1 df, plot lines plots. alternative view effects can seen canonical discriminant space, , predictor shows scores linear combination responses contributes multivariate test effect, together weights responses. use candiscList() calculate canonical analyses predictor terms Hern.mod. 1D canonical discriminant plots terms can obtained interactively menu, simply plotting Hern.canL object. Plots separate terms produced lines , shown Figure 2.2 Figure 2.3. pstat build: Figure 2.2: 1D Canonical discriminant plots physical status (pstat) build. canonical scores better outcomes associated smaller scores. Arrows show correlations responses 1D canonical scores. age cardiac: Figure 2.3: 1D Canonical discriminant plots age cardiac. canonical scores better outcomes associated smaller scores. plots, canonical scores panel shows linear combinations response variables largest possible \\(R^2\\). Better outcomes correspond numerically smaller canonical scores. arrows structure panel proportional canonical weights. plots provide simple interpretations results canonical combinations responses. Better physical status, smaller body build, lower age absence cardiac complications positively related better outcomes.","code":"Hern.canL <- candiscList(Hern.mod) plot(Hern.canL) plot(Hern.canL, term=\"pstat\") plot(Hern.canL, term=\"build\") plot(Hern.canL, term=\"age\") plot(Hern.canL, term=\"cardiac\")"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"grades-in-a-sociology-course","dir":"Articles","previous_headings":"","what":"Grades in a Sociology Course","title":"HE plot MMRA Examples","text":"data set SocGrades contains four outcome measures student performance introductory sociology course together six potential predictors. data used Marascuilo & Levin (1983) example canonical correlation analysis, also suitable examples multivariate multiple regression, MANOVA, MANCOVA step-analysis multivariate linear models. outcome measures used three test scores course, midterm1, midterm2, final, course evaluation (eval).2 Predictor variables : class, student’s social class (ordered factor levels 1 > 2 > 3) sex, gpa, grade point average, boards, College Board test scores, hssoc, previous high school unit sociology? (values , yes), pretest, score course pretest.","code":"str(SocGrades) #> 'data.frame': 40 obs. of 10 variables: #> $ class : Ord.factor w/ 3 levels \"3\"<\"2\"<\"1\": 2 2 2 1 2 1 3 2 1 2 ... #> $ sex : Factor w/ 2 levels \"F\",\"M\": 2 2 2 2 2 2 1 2 2 1 ... #> $ gpa : num 3.55 2.7 3.5 2.91 3.1 3.49 3.17 3.57 3.76 3.81 ... #> $ boards : int 410 390 510 430 600 610 610 560 700 460 ... #> $ hssoc : Factor w/ 2 levels \"no\",\"yes\": 1 1 1 1 1 1 1 1 2 2 ... #> $ pretest : int 17 20 22 13 16 28 14 10 28 30 ... #> $ midterm1: int 43 50 47 24 47 57 42 42 69 48 ... #> $ midterm2: int 61 47 79 40 60 59 61 79 83 67 ... #> $ final : int 129 60 119 100 79 99 92 107 156 110 ... #> $ eval : int 3 1 1 1 2 1 3 2 1 1 ..."},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"models","dir":"Articles","previous_headings":"3 Grades in a Sociology Course","what":"Models","title":"HE plot MMRA Examples","text":"basic MLM fit grades.mod predictor variables.","code":"data(SocGrades) grades.mod <- lm(cbind(midterm1, midterm2, final, eval) ~ class + sex + gpa + boards + hssoc + pretest, data=SocGrades) Anova(grades.mod, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> class 2 1.567 11.75 4 30 7.3e-06 *** #> sex 1 0.553 4.01 4 29 0.0104 * #> gpa 1 1.208 8.76 4 29 9.2e-05 *** #> boards 1 0.731 5.30 4 29 0.0025 ** #> hssoc 1 0.035 0.25 4 29 0.9052 #> pretest 1 0.313 2.27 4 29 0.0859 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"screening-for-interactions","dir":"Articles","previous_headings":"3 Grades in a Sociology Course > 3.1 Models","what":"Screening for interactions","title":"HE plot MMRA Examples","text":"univariate multivariate response models, often useful screen higher-order terms (interactions, non-linear predictors). can easily done using update(), . First, try extended model pairwise interactions predictors. model formula, ~.^2, . represents terms model, ^2 generates products terms, class:sex, class:gpa, forth. results , interaction class:sex significant, main effects hssoc pretest remain insignificant. revised model explore grades.mod3, pairwise plot responses (Figure 3.1 shows nearly effects expected directions: higher gpa, boards, class leads better performance outcomes. interaction class:sex seems confined largely midterm1. Figure 3.1: pairs plot SocGrade, model grades.mod3. effects easier appreciate three exam grades jointly 3D plot can rotate interactively. snapshot shown Figure 3.2. Figure 3.2: 3D plot SocGrades, model grades.mod3 Interactive rotation plot shows effect class two dimensional, , one dimension small. major axis class ellipsoid aligned increasing performance three grades, expected ordering three social classes.","code":"grades.mod2 <- update(grades.mod, . ~ .^2) Anova(grades.mod2, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> class 2 2.817 7.04 4 10 0.0058 ** #> sex 1 0.487 1.09 4 9 0.4152 #> gpa 1 1.998 4.49 4 9 0.0286 * #> boards 1 2.338 5.26 4 9 0.0183 * #> hssoc 1 0.281 0.63 4 9 0.6522 #> pretest 1 0.510 1.15 4 9 0.3946 #> class:sex 2 2.039 5.10 4 10 0.0168 * #> class:gpa 2 0.982 2.45 4 10 0.1137 #> class:boards 2 0.522 1.31 4 10 0.3321 #> class:hssoc 2 0.356 0.89 4 10 0.5041 #> class:pretest 2 1.005 2.51 4 10 0.1082 #> sex:gpa 1 0.269 0.60 4 9 0.6694 #> sex:boards 1 0.184 0.41 4 9 0.7944 #> sex:hssoc 1 0.909 2.04 4 9 0.1714 #> sex:pretest 1 0.885 1.99 4 9 0.1795 #> gpa:boards 1 0.447 1.00 4 9 0.4537 #> gpa:hssoc 1 0.596 1.34 4 9 0.3269 #> gpa:pretest 1 0.472 1.06 4 9 0.4291 #> boards:hssoc 1 0.353 0.80 4 9 0.5573 #> boards:pretest 1 0.705 1.59 4 9 0.2593 #> hssoc:pretest 1 1.464 3.29 4 9 0.0635 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 grades.mod3 <- update(grades.mod, . ~ . + class:sex - hssoc - pretest) Anova(grades.mod3, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> class 2 1.588 11.91 4 30 6.5e-06 *** #> sex 1 0.575 4.17 4 29 0.00864 ** #> gpa 1 1.434 10.40 4 29 2.4e-05 *** #> boards 1 0.895 6.49 4 29 0.00074 *** #> class:sex 2 0.450 3.38 4 30 0.02143 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 pairs(grades.mod3) heplot3d(grades.mod3, wire=FALSE)"},{"path":"https://friendly.github.io/heplots/articles/HE_mmra.html","id":"canonical-analysis-1","dir":"Articles","previous_headings":"3 Grades in a Sociology Course","what":"Canonical analysis","title":"HE plot MMRA Examples","text":"representation effects canonical space particularly useful . , use candiscList() compute canonical decompositions terms model, extract canonical \\(R^2\\) terms result. use heplot() \"candiscList\" object show effects class canonical space, giving Figure 3.3. Figure 3.3: Canonical plot class effect grades.mod3 can seen Figure 3.3 nearly variation exam performance due class aligned first canonical dimension. three tests course evaluation similar weights dimension, course evaluation differs rest along second, small dimension. 1D plots canonical scores effects model also interest, provide simple interpretations effects response variables. statements produce plots shown Figure 3.4. Figure 3.4: 1D Canonical discriminant plots sex gpa. Higher canonical scores reflect better course performance. readily seen males perform better overall, effect sex strongest midterm2. well, increasing course performance tests strongly associated gpa.","code":"# calculate canonical results for all terms grades.can <- candiscList(grades.mod3) # extract canonical R^2s unlist(lapply(grades.can, function(x) x$canrsq)) #> class1 class2 sex gpa boards class:sex1 class:sex2 #> 0.61362 0.02419 0.36527 0.58915 0.47227 0.31046 0.13293 # plot class effect in canonical space heplot(grades.can, term=\"class\", scale=4, fill=TRUE, var.col=\"black\", var.lwd=2) plot(grades.can, term=\"sex\") plot(grades.can, term=\"gpa\")"},{"path":[]},{"path":"https://friendly.github.io/heplots/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Michael Friendly. Author, maintainer. John Fox. Author. Georges Monette. Author. Phil Chalmers. Contributor. Duncan Murdoch. Contributor.","code":""},{"path":"https://friendly.github.io/heplots/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Michael Friendly John Fox Georges Monette (2024). heplots: Visualizing Tests Multivariate Linear Models. R package version 1.6.3. URL https://CRAN.R-project.org/package=heplots Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 2007, 16, 421-444 Michael Friendly (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. DOI: 10.18637/jss.v037.i04","code":"@Manual{, title = {{heplots}: Visualizing Tests in Multivariate Linear Models}, author = {Michael Friendly and John Fox and Georges Monette}, year = {2024}, note = {R package version 1.6.3}, url = {https://CRAN.R-project.org/package=heplots}, } @Article{, title = {HE plots for Multivariate General Linear Models}, author = {Michael Friendly}, year = {2007}, journal = {Journal of Computational and Graphical Statistics}, volume = {16}, number = {4}, pages = {421--444}, } @Article{, title = {HE Plots for Repeated Measures Designs}, author = {Michael Friendly}, journal = {Journal of Statistical Software}, year = {2010}, volume = {37}, number = {4}, pages = {1--40}, doi = {10.18637/jss.v037.i04}, }"},{"path":[]},{"path":"https://friendly.github.io/heplots/index.html","id":"visualizing-hypothesis-tests-in-multivariate-linear-models","dir":"","previous_headings":"","what":"Visualizing Hypothesis Tests in Multivariate Linear Models","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"Version 1.6.3","code":""},{"path":"https://friendly.github.io/heplots/index.html","id":"description","dir":"","previous_headings":"","what":"Description","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"heplots package provides functions visualizing hypothesis tests multivariate linear models (MANOVA, multivariate multiple regression, MANCOVA, repeated measures designs). plots represent sums--squares--products matrices linear hypotheses (H) error (E) using ellipses (two dimensions), ellipsoids (three dimensions), line segments one dimension. theory applications, see: Friendly (2007) basic theory based. Fox, Friendly Monette (2009) brief introduction, Friendly (2010) application ideas repeated measure designs, Friendly, Monette Fox (2013) general discussion role elliptical geometry statistical understanding, Friendly & Sigal (2017) applied R tutorial, Friendly & Sigal (2018) theory examples visualizing equality covariance matrices. use work teaching research, please cite given citation(\"heplots\") see Citation. topics now addressed include: robust MLMs, using iteratively re-weighted least squared -weight observations large multivariate residuals, robmlm(). Mahalanobis() calculates classical robust Mahalanobis squared distances using MCD MVE estimators center covariance. visualizing tests equality covariance matrices MLMs (Box’s M test), boxM() plot.boxM(). χ2 Q-Q plots MLMs (cqplot()) detect outliers assess multivariate normality residuals. bivariate coefficient plots showing elliptical confidence regions (coefplot()). respect, heplots package now aims provide wide range tools analyzing visualizing multivariate response linear models, together packages: related candisc package provides plots canonical discriminant space, space linear combinations responses show maximum possible effects canonical correlation multivariate regression designs. Another package, mvinfluence, provides diagnostic measures plots influential observations MLM designs. Several tutorial vignettes also included. See vignette(package=\"heplots\").","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/index.html","id":"he-plot-functions","dir":"","previous_headings":"","what":"HE plot functions","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"graphical functions contained display multivariate model effects variable (data) space, one response variables (contrasts among response variables repeated measures designs). heplot() constructs two-dimensional plots model terms linear hypotheses pairs response variables multivariate linear models. heplot3d() constructs analogous 3D plots triples response variables. pairs method, pairs.mlm() constructs scatterplot matrix pairwise plots. heplot1d() constructs 1-dimensional analogs plots model terms linear hypotheses single response variables.","code":""},{"path":"https://friendly.github.io/heplots/index.html","id":"other-functions","dir":"","previous_headings":"","what":"Other functions","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"glance.mlm() extends broom::glance.lm() multivariate response models, giving one-line statistical summary response variable. boxM() Calculates Box’s M test homogeneity covariance matrices MANOVA design. plot method displays visual representation components test. Associated , bartletTests() levineTests() give univariate tests homogeneity variance response measure MLM. covEllipses() draw covariance (data) ellipses one group, optionally including ellipse pooled within-group covariance.","code":""},{"path":"https://friendly.github.io/heplots/index.html","id":"repeated-measure-designs","dir":"","previous_headings":"Other functions","what":"Repeated measure designs","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"repeated measure designs, -subject effects within-subject effects must plotted separately, error terms (E matrices) differ. terms involving within-subject effects, functions carry linear transformation matrix Y responses matrix Y M, M model matrix term intra-subject design produce plots H E matrices transformed space. vignette \"repeated\" describes graphical methods repeated measures designs. (present, vignette available plots repeated measures designs.)","code":""},{"path":"https://friendly.github.io/heplots/index.html","id":"datasets","dir":"","previous_headings":"","what":"Datasets","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"package also provides large collection data sets illustrating variety multivariate linear models types listed , together graphical displays. table classifies method tags. names linked documentation pkgdown website, [http://friendly.github.io/heplots].","code":""},{"path":"https://friendly.github.io/heplots/index.html","id":"examples","dir":"","previous_headings":"","what":"Examples","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"example illustrates plots using classic iris data set. means flower variables differ Species? dataset imputus R. . Fisher (1936) propose method discriminant analysis using data collected Edgar Anderson (1928). Though may rightly deprecate Fisher supporter eugenics, Anderson’s iris dataset blamed. basic plot shows H E ellipses first two response variables (: Sepal.Length Sepal.Width). multivariate test significant (Roy’s test) iff H ellipse projects anywhere outside E ellipse. positions group means show differ two response variables shown, provide interpretation orientation H ellipse: long directions differences among means.","code":"iris.mod <- lm(cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) ~ Species, data=iris) heplot(iris.mod)"},{"path":"https://friendly.github.io/heplots/index.html","id":"contrasts","dir":"","previous_headings":"Examples","what":"Contrasts","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"Contrasts linear hypotheses can shown well, ellipses look better filled. create contrasts test differences versacolor virginca also setosa average two. 1 df contrast plots degenerate 1D ellipse– line. contrasts orthogonal, add total 2 df effect Species. Note first contrast, labeled V:V, distinguishes means versicolor virginica; second contrast, S:VV distinguishes setosa two.","code":"par(mar=c(4,4,1,1)+.1) contrasts(iris$Species)<-matrix(c(0, -1, 1, 2, -1, -1), nrow=3, ncol=2) contrasts(iris$Species) #> [,1] [,2] #> setosa 0 2 #> versicolor -1 -1 #> virginica 1 -1 iris.mod <- lm(cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) ~ Species, data=iris) hyp <- list(\"V:V\"=\"Species1\",\"S:VV\"=\"Species2\") heplot(iris.mod, hypotheses=hyp, fill=TRUE, fill.alpha=0.1)"},{"path":"https://friendly.github.io/heplots/index.html","id":"all-pairwise-he-plots","dir":"","previous_headings":"Examples","what":"All pairwise HE plots","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"pairwise plots produced using pairs() method MLM objects.","code":"pairs(iris.mod, hypotheses=hyp, hyp.labels=FALSE, fill=TRUE, fill.alpha=0.1)"},{"path":"https://friendly.github.io/heplots/index.html","id":"covariance-ellipses","dir":"","previous_headings":"Examples","what":"Covariance ellipses","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"MANOVA relies assumption within-group covariance matrices equal. useful visualize space predictors. covEllipses() provides classical robust estimates. figure shows three Iris species pooled covariance matrix, E matrix used MANOVA tests.","code":"covEllipses(iris[,1:4], iris$Species) covEllipses(iris[,1:4], iris$Species, fill=TRUE, method=\"mve\", add=TRUE, labels=\"\")"},{"path":"https://friendly.github.io/heplots/index.html","id":"references","dir":"","previous_headings":"","what":"References","title":"Visualizing Hypothesis Tests in Multivariate Linear Models","text":"Anderson, E. (1928). Problem Species Northern Blue Flags, Iris versicolor L. Iris virginica L. Annals Missouri Botanical Garden, 13, 241–313. Fisher, R. . (1936). Use Multiple Measurements Taxonomic Problems. Annals Eugenics, 8, 379–388. Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples. Journal Statistical Software, 17, 1-42. Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421-444. DOI. Fox, J., Friendly, M. & Monette, G. (2009). Visualizing hypothesis tests multivariate linear models: heplots package R Computational Statistics, 24, 233-246. Friendly, M. (2010). plots repeated measures designs. Journal Statistical Software, 37, 1–37. Friendly, M.; Monette, G. & Fox, J. (2013). Elliptical Insights: Understanding Statistical Methods Elliptical Geometry Statistical Science, 28, 1-39. Friendly, M. & Sigal, M. (2017). Graphical Methods Multivariate Linear Models Psychological Research: R Tutorial. Quantitative Methods Psychology, 13, 20-45. Friendly, M. & Sigal, M. (2018): Visualizing Tests Equality Covariance Matrices, American Statistician, DOI","code":""},{"path":"https://friendly.github.io/heplots/reference/AddHealth.html","id":null,"dir":"Reference","previous_headings":"","what":"Adolescent Mental Health Data — AddHealth","title":"Adolescent Mental Health Data — AddHealth","text":"data taken National Longitudinal Study Adolescent Health. cross-sectional sample participants grades 7--12, described analyzed Warne (2014).","code":""},{"path":"https://friendly.github.io/heplots/reference/AddHealth.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Adolescent Mental Health Data — AddHealth","text":"data frame 4344 observations following 3 variables. grade ordered factor levels 7 < 8 < 9 < 10 < 11 < 12 depression numeric vector anxiety numeric vector","code":""},{"path":"https://friendly.github.io/heplots/reference/AddHealth.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Adolescent Mental Health Data — AddHealth","text":"Warne, R. T. (2014). primer Multivariate Analysis Variance (MANOVA) Behavioral Scientists. Practical Assessment, Research & Evaluation, 19 (1). https://scholarworks.umass.edu/pare/vol19/iss1/17/","code":""},{"path":"https://friendly.github.io/heplots/reference/AddHealth.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Adolescent Mental Health Data — AddHealth","text":"depression response question \"last month, often feel depressed blue?\" anxiety response question \"last month, often trouble relaxing?\" responses depression anxiety recorded 5-point Likert scale, categories 0=\"Never\", 1=\"Rarely\", 2=\"Occasionally\", 3=\"Often\", 4=\"Every day\"","code":""},{"path":"https://friendly.github.io/heplots/reference/AddHealth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Adolescent Mental Health Data — AddHealth","text":"","code":"data(AddHealth) if(require(dplyr) & require(ggplot2)) { # find means & std.errors by grade means <- AddHealth |> group_by(grade) |> summarise( n = n(), dep_se = sd(depression, na.rm = TRUE) / sqrt(n), anx_se = sd(anxiety, na.rm = TRUE) / sqrt(n), depression = mean(depression), anxiety = mean(anxiety) ) |> relocate(depression, anxiety, .after = grade) |> print() # plot means with std.error bars ggplot(data = means, aes(x = anxiety, y = depression, color = grade)) + geom_point(size = 3) + geom_errorbarh(aes(xmin = anxiety - anx_se, xmax = anxiety + anx_se)) + geom_errorbar(aes(ymin = depression - dep_se, ymax = depression + dep_se)) + geom_line(aes(group = 1), linewidth = 1.5) + geom_label(aes(label = grade), nudge_x = -0.015, nudge_y = 0.02) + scale_color_discrete(guide = \"none\") + theme_bw(base_size = 15) } #> Loading required package: dplyr #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union #> Loading required package: ggplot2 #> # A tibble: 6 × 6 #> grade depression anxiety n dep_se anx_se #> #> 1 7 0.881 0.751 622 0.0447 0.0420 #> 2 8 1.08 0.804 664 0.0461 0.0411 #> 3 9 1.17 0.934 778 0.0426 0.0387 #> 4 10 1.27 0.956 817 0.0431 0.0388 #> 5 11 1.37 1.12 790 0.0428 0.0411 #> 6 12 1.34 1.10 673 0.0439 0.0426 # fit mlm AH.mod <- lm(cbind(anxiety, depression) ~ grade, data=AddHealth) car::Anova(AH.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> grade 5 0.022415 9.834 10 8676 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 summary(car::Anova(AH.mod)) #> #> Type II MANOVA Tests: #> #> Sum of squares and products for error: #> anxiety depression #> anxiety 5210.233 3021.691 #> depression 3021.691 6058.911 #> #> ------------------------------------------ #> #> Term: grade #> #> Sum of squares and products for the hypothesis: #> anxiety depression #> anxiety 75.02650 87.57399 #> depression 87.57399 112.76722 #> #> Multivariate Tests: grade #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 5 0.0224153 9.833964 10 8676 < 2.22e-16 *** #> Wilks 5 0.9776192 9.872584 10 8674 < 2.22e-16 *** #> Hotelling-Lawley 5 0.0228579 9.911186 10 8672 < 2.22e-16 *** #> Roy 5 0.0211939 18.387786 5 4338 < 2.22e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(AH.mod, hypotheses=\"grade.L\", fill=c(TRUE, FALSE), level = 0.4)"},{"path":"https://friendly.github.io/heplots/reference/Adopted.html","id":null,"dir":"Reference","previous_headings":"","what":"Adopted Children — Adopted","title":"Adopted Children — Adopted","text":"Data subset observational, longitudinal, study adopted children. child's intelligence related intelligence biological mother intelligence adoptive mother?","code":""},{"path":"https://friendly.github.io/heplots/reference/Adopted.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Adopted Children — Adopted","text":"data frame 62 observations following 6 variables. AMED adoptive mother's years education (proxy IQ) BMIQ biological mother's score IQ test Age2IQ IQ child age 2 Age4IQ IQ child age 4 Age8IQ IQ child age 8 Age13IQ IQ child age 13","code":""},{"path":"https://friendly.github.io/heplots/reference/Adopted.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Adopted Children — Adopted","text":"Ramsey, F.L. Schafer, D.W. (2002). Statistical Sleuth: Course Methods Data Analysis (2nd ed), Duxbury. data set identical ex1605 Sleuth2 package.","code":""},{"path":"https://friendly.github.io/heplots/reference/Adopted.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Adopted Children — Adopted","text":"child's intelligence measured age 2, 4, 8, 13 sample. intelligence change time, changes related intelligence birth adoptive mother?","code":""},{"path":"https://friendly.github.io/heplots/reference/Adopted.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Adopted Children — Adopted","text":"Friendly, M. (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 . Skodak, M. Skeels, H.M. (1949). Final Follow-Study One Hundred Adopted Children, Journal Genetic Psychology 75: 85--125.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/Adopted.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Adopted Children — Adopted","text":"","code":"# Treat as multivariate regression problem Adopted.mod <- lm(cbind(Age2IQ, Age4IQ, Age8IQ, Age13IQ) ~ AMED + BMIQ, data=Adopted) Adopted.mod #> #> Call: #> lm(formula = cbind(Age2IQ, Age4IQ, Age8IQ, Age13IQ) ~ AMED + #> BMIQ, data = Adopted) #> #> Coefficients: #> Age2IQ Age4IQ Age8IQ Age13IQ #> (Intercept) 117.63046 93.33771 88.03739 76.84827 #> AMED -0.44136 -0.02073 -0.01216 -0.16063 #> BMIQ 0.04001 0.22172 0.30961 0.36747 #> require(car) #> Loading required package: car #> Loading required package: carData #> #> Attaching package: 'car' #> The following object is masked from 'package:dplyr': #> #> recode # test overall multivariate regression print(linearHypothesis(Adopted.mod, c(\"AMED\",\"BMIQ\")), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 0.1964576 1.552235 8 114 0.147134 #> Wilks 2 0.8065020 1.589253 8 112 0.135846 #> Hotelling-Lawley 2 0.2362528 1.624238 8 110 0.125939 #> Roy 2 0.2195371 3.128404 4 57 0.021426 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # show separate linear regressions op <- par(mfcol=c(2,4), mar=c(4,4,1,1)+.1) for (i in 3:6) { dataEllipse(as.matrix(Adopted[,c(1,i)]), col=\"black\", levels=0.68, ylim=c(70,140)) abline(lm(Adopted[,i] ~ Adopted[,1]), col=\"red\", lwd=2) dataEllipse(as.matrix(Adopted[,c(2,i)]), col=\"black\", levels=0.68, ylim=c(70,140)) abline(lm(Adopted[,i] ~ Adopted[,2]), col=\"red\", lwd=2) abline(a=0,b=1, lty=1, col=\"blue\") } par(op) # between-S (MMReg) plots heplot(Adopted.mod, hypotheses=list(\"Reg\"=c(\"AMED\", \"BMIQ\")), main=\"IQ scores of adopted children: MMReg\") pairs(Adopted.mod, hypotheses=list(\"Reg\"=c(\"AMED\", \"BMIQ\"))) if(requireNamespace(\"rgl\")){ heplot3d(Adopted.mod, hypotheses=list(\"Reg\"=c(\"AMED\", \"BMIQ\")), col = c(\"red\", \"blue\", \"black\", \"gray\"), wire=FALSE) } # Treat IQ at different ages as a repeated measure factor # within-S models & plots Age <- data.frame(Age=ordered(c(2,4,8,13))) car::Anova(Adopted.mod, idata=Age, idesign=~Age, test=\"Roy\") #> #> Type II Repeated Measures MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 115.669 6824.5 1 59 < 2.2e-16 *** #> AMED 1 0.002 0.1 1 59 0.737878 #> BMIQ 1 0.126 7.5 1 59 0.008302 ** #> Age 1 0.712 13.5 3 57 8.911e-07 *** #> AMED:Age 1 0.014 0.3 3 57 0.845454 #> BMIQ:Age 1 0.122 2.3 3 57 0.085792 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # within-S plots heplot(Adopted.mod, idata=Age, idesign=~Age, iterm=\"Age\", cex=1.25, cex.lab=1.4, fill=c(FALSE, TRUE), hypotheses=list(\"Reg\"=c(\"AMED\", \"BMIQ\")) )"},{"path":"https://friendly.github.io/heplots/reference/arrow3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a 3D Arrow in an RGL Scene — arrow3d","title":"Draw a 3D Arrow in an RGL Scene — arrow3d","text":"Draws 3D arrow rgl scene barbs arrow head","code":""},{"path":"https://friendly.github.io/heplots/reference/arrow3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a 3D Arrow in an RGL Scene — arrow3d","text":"","code":"arrow3d( p0 = c(0, 0, 0), p1 = c(1, 1, 1), barblen, s = 0.05, theta = pi/6, n = 3, ... )"},{"path":"https://friendly.github.io/heplots/reference/arrow3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a 3D Arrow in an RGL Scene — arrow3d","text":"p0 Initial point (tail arrow) p1 Ending point (head arrow) barblen Length barb, data units s length barb fraction line length (unless barblen specified) theta opening angle barbs n number barbs ... args passed lines3d line styling, e.g., color, lwd, etc. See material3d.","code":""},{"path":"https://friendly.github.io/heplots/reference/arrow3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw a 3D Arrow in an RGL Scene — arrow3d","text":"Returns (invisibly): integer ID line added scene","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/arrow3d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw a 3D Arrow in an RGL Scene — arrow3d","text":"Barry Rowlingson, posted R-help, 1/10/2010","code":""},{"path":"https://friendly.github.io/heplots/reference/arrow3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw a 3D Arrow in an RGL Scene — arrow3d","text":"","code":"arrow3d(c(0,0,0), c(2,2,2), barblen=.2, lwd=3, col=\"black\") arrow3d(c(0,0,0), c(-2,2,2), barblen=.2, lwd=3, col=\"red\")"},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":null,"dir":"Reference","previous_headings":"","what":"Bartlett Tests of Homogeneity of Variances — bartlettTests","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"function extends bartlett.test multivariate response setting. performs Bartlett test homogeneity variances set response variables, prints compact summary.","code":""},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"","code":"bartlettTests(y, group, ...)"},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"y data frame matrix numeric response variables multivariate linear model. group vector factor object giving group corresponding elements rows y ... arguments, passed bartlett.test","code":""},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"object classes \"anova\" \"data.frame\", one observation response variable y.","code":""},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"Bartlett's test univariate version Box's M test equality covariance matrices. function provides univariate follow-test Box's M test give one simple assessment response variables contribute significant differences variances among groups.","code":""},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"Bartlett, M. S. (1937). Properties sufficiency statistical tests. Proceedings Royal Society London Series , 160, 268-282.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/bartlettTests.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Bartlett Tests of Homogeneity of Variances — bartlettTests","text":"","code":"bartlettTests(iris[,1:4], iris$Species) #> Bartlett's Tests for Homogeneity of Variance #> #> Chisq df Pr(>Chisq) #> Sepal.Length 16.0057 2 0.0003345 *** #> Sepal.Width 2.0911 2 0.3515028 #> Petal.Length 55.4225 2 9.229e-13 *** #> Petal.Width 39.2131 2 3.055e-09 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 data(Skulls, package=\"heplots\") bartlettTests(Skulls[,-1], Skulls$epoch) #> Bartlett's Tests for Homogeneity of Variance #> #> Chisq df Pr(>Chisq) #> mb 7.3382 4 0.1191 #> bh 0.7315 4 0.9474 #> bl 3.5155 4 0.4755 #> nh 4.3763 4 0.3575"},{"path":"https://friendly.github.io/heplots/reference/bbox3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Find the bounding box of a rgl::mesh3d or rgl::qmesh3d object — bbox3d","title":"Find the bounding box of a rgl::mesh3d or rgl::qmesh3d object — bbox3d","text":"Ellipsoids created rgl functions meshes points, segments, ... coordinates various forms. function calculates bounding box, defined range x, y, z coordinates.","code":""},{"path":"https://friendly.github.io/heplots/reference/bbox3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Find the bounding box of a rgl::mesh3d or rgl::qmesh3d object — bbox3d","text":"","code":"bbox3d(x, ...)"},{"path":"https://friendly.github.io/heplots/reference/bbox3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Find the bounding box of a rgl::mesh3d or rgl::qmesh3d object — bbox3d","text":"x mesh3d object ... ignored","code":""},{"path":"https://friendly.github.io/heplots/reference/bbox3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Find the bounding box of a rgl::mesh3d or rgl::qmesh3d object — bbox3d","text":"2 x 3 matrix, giving minimum maximum values rows x, y, z coordinates columns.","code":""},{"path":"https://friendly.github.io/heplots/reference/Bees.html","id":null,"dir":"Reference","previous_headings":"","what":"Captive and maltreated bees — Bees","title":"Captive and maltreated bees — Bees","text":"Pabalan, Davey Packe (2000) studied effects captivity maltreatment reproductive capabilities queen worker bees complex factorial design.","code":""},{"path":"https://friendly.github.io/heplots/reference/Bees.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Captive and maltreated bees — Bees","text":"data frame 246 observations following 6 variables. caste factor levels Queen Worker treat factor levels \"\" CAP MAL time ordered factor: time treatment Iz index ovarian development Iy index ovarian reabsorption trtime factor levels 0 CAP05 CAP07 CAP10 CAP12 CAP15 MAL05 MAL07 MAL10 MAL12 MAL15","code":""},{"path":"https://friendly.github.io/heplots/reference/Bees.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Captive and maltreated bees — Bees","text":"Pabalan, N., Davey, K. G. & Packe, L. (2000). Escalation Aggressive Interactions Staged Encounters Halictus ligatus Say (Hymenoptera: Halictidae), Comparison Circle Tube Behaviors Halictine Species Journal Insect Behavior, 13, 627-650.","code":""},{"path":"https://friendly.github.io/heplots/reference/Bees.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Captive and maltreated bees — Bees","text":"Bees placed small tube either held captive (CAP) shaken periodically (MAL) one 5, 7.5, 10, 12.5 15 minutes, sacrificed two measures: ovarian development (Iz) ovarian reabsorption (Iy), taken. single control group measured treatment, .e., time 0; n=10 per group. design thus nearly three-way factorial, factors caste (Queen, Worker), treat (CAP, MAL) time, except 11 combinations Treatment Time; call trtime . Models three-way factorial design, using formula cbind(Iz,Iy) ~ caste*treat*time ignore control condition time==0, treat==NA. handle additional control group time==0, separating effects Treatment Time, 10 contrasts can defined trtime factor model cbind(Iz,Iy) ~ caste*trtime See demo(bees.contrasts) details. heplot examples , default size=\"evidence\" displays crowded interpret, effects highly significant. alternative effect-size scaling, size=\"effect\", makes relations clearer.","code":""},{"path":"https://friendly.github.io/heplots/reference/Bees.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Captive and maltreated bees — Bees","text":"Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples Journal Statistical Software, 17, 1-42.","code":""},{"path":"https://friendly.github.io/heplots/reference/Bees.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Captive and maltreated bees — Bees","text":"","code":"data(Bees) require(car) # 3-way factorial, ignoring 0 group bees.mod <- lm(cbind(Iz,Iy) ~ caste*treat*time, data=Bees) car::Anova(bees.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> caste 1 0.72792 240.787 2 180 < 2.2e-16 *** #> treat 1 0.19313 21.542 2 180 4.098e-09 *** #> time 4 0.75684 27.548 8 362 < 2.2e-16 *** #> caste:treat 1 0.02506 2.313 2 180 0.1019 #> caste:time 4 0.28670 7.572 8 362 2.288e-09 *** #> treat:time 4 0.01941 0.443 8 362 0.8945 #> caste:treat:time 4 0.06796 1.592 8 362 0.1257 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 op<-palette(c(palette()[1:4],\"brown\",\"magenta\", \"olivedrab\",\"darkgray\")) heplot(bees.mod, xlab=\"Iz: Ovarian development\", ylab=\"Iz: Ovarian reabsorption\", main=\"Bees: ~caste*treat*time\") heplot(bees.mod, size=\"effect\", xlab=\"Iz: Ovarian development\", ylab=\"Iz: Ovarian reabsorption\", main=\"Bees: ~caste*treat*time\", ) # two-way design, using trtime bees.mod1 <- lm(cbind(Iz,Iy) ~ caste*trtime, data=Bees) Anova(bees.mod1) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> caste 1 0.67976 236.673 2 223 < 2.2e-16 *** #> trtime 10 0.82851 15.842 20 448 < 2.2e-16 *** #> caste:trtime 10 0.32173 4.294 20 448 3.746e-09 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # HE plots for this model, with both significance and effect size scaling heplot(bees.mod1, xlab=\"Iz: Ovarian development\", ylab=\"Iz: Ovarian reabsorption\", main=\"Bees: ~caste*trtime\") heplot(bees.mod1, xlab=\"Iz: Ovarian development\", ylab=\"Iz: Ovarian reabsorption\", main=\"Bees: ~caste*trtime\", size=\"effect\") palette(op) # effect plots for separate responses if(require(effects)) { bees.lm1 <-lm(Iy ~ treat*caste*time, data=Bees) bees.lm2 <-lm(Iz ~ treat*caste*time, data=Bees) bees.eff1 <- allEffects(bees.lm1) plot(bees.eff1,multiline=TRUE,ask=FALSE) bees.eff2 <- allEffects(bees.lm2) plot(bees.eff2,multiline=TRUE,ask=FALSE) } #> Loading required package: effects #> lattice theme set by effectsTheme() #> See ?effectsTheme for details."},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":null,"dir":"Reference","previous_headings":"","what":"Box's M-test — boxM","title":"Box's M-test — boxM","text":"boxM performs Box's (1949) M-test homogeneity covariance matrices obtained multivariate normal data according one classification factors. test compares product log determinants separate covariance matrices log determinant pooled covariance matrix, analogous likelihood ratio test. test statistic uses chi-square approximation.","code":""},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Box's M-test — boxM","text":"","code":"boxM(Y, ...) # S3 method for default boxM(Y, group, ...) # S3 method for formula boxM(Y, data, ...) # S3 method for lm boxM(Y, ...) # S3 method for boxM summary(object, digits = getOption(\"digits\"), cov = FALSE, quiet = FALSE, ...)"},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Box's M-test — boxM","text":"Y response variable matrix default method, \"mlm\" \"formula\" object multivariate linear model. Y linear-model object formula, variables right-hand-side model must factors must completely crossed, e.g., :B ... Arguments passed methods. group factor defining groups, vector length n . data numeric data.frame matrix containing n observations p variables; expected n > p. object \"boxM\" object summary method digits number digits print summary method cov logical; TRUE covariance matrices printed. quiet logical; TRUE printing summary suppressed","code":""},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Box's M-test — boxM","text":"list class c(\"htest\", \"boxM\") containing following components: statistic approximated value chi-square distribution. parameter degrees freedom related test statistic case follows Chi-square distribution. p.value p-value test. cov list containing within covariance matrix level grouping. pooled pooled covariance matrix. logDet vector containing natural logarithm matrix cov, followed value pooled covariance matrix means matrix means groups, followed grand means df vector degrees freedom groups, followed pooled covariance matrix data.name character string giving names data. method character string \"Box's M-test Homogeneity Covariance Matrices\".","code":""},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Box's M-test — boxM","text":"object class \"htest\", statistical test printed normally default. object class \"boxM\", methods available. general provision yet handling missing data. Missing data simply removed, warning. well, computation assumes covariance matrix group non-singular, \\(log det(S_i)\\) can calculated group. minimum, requires \\(n > p\\) group. Box's M test multivariate linear model highly sensitive departures multivariate normality, just analogous univariate test. also affected adversely unbalanced designs. people recommend ignore result unless highly significant, e.g., p < .0001 worse. summary method prints variety additional statistics based eigenvalues covariance matrices. returned invisibly, list containing following components: logDet - log determinants eigs - eigenvalues covariance matrices eigstats - statistics computed eigenvalues covariance matrix:product: product eigenvalues, \\(\\prod{\\lambda_i}\\);sum: sum eigenvalues, \\(\\sum{\\lambda_i}\\);precision: average precision eigenvalues, \\(1/\\sum(1/\\lambda_i)\\);max: maximum eigenvalue, \\(\\lambda_1\\)","code":""},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Box's M-test — boxM","text":"Box, G. E. P. (1949). general distribution theory class likelihood criteria. Biometrika, 36, 317-346. Morrison, D.F. (1976) Multivariate Statistical Methods.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Box's M-test — boxM","text":"default method taken biotools package, Anderson Rodrigo da Silva anderson.agro@hotmail.com Generalized Michael Friendly John Fox","code":""},{"path":"https://friendly.github.io/heplots/reference/boxM.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Box's M-test — boxM","text":"","code":"data(iris) # default method res <- boxM(iris[, 1:4], iris[, \"Species\"]) res #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: iris[, 1:4] #> Chi-Sq (approx.) = 140.94, df = 20, p-value < 2.2e-16 #> summary(res) #> Summary for Box's M-test of Equality of Covariance Matrices #> #> Chi-Sq:\t 140.943 #> df:\t 20 #> p-value: < 2.2e-16 #> #> log of Covariance determinants: #> setosa versicolor virginica pooled #> -13.067360 -10.874325 -8.927058 -9.958539 #> #> Eigenvalues: #> setosa versicolor virginica pooled #> 1 0.236455690 0.487873944 0.69525484 0.44356592 #> 2 0.036918732 0.072384096 0.10655123 0.08618331 #> 3 0.026796399 0.054776085 0.05229543 0.05535235 #> 4 0.009033261 0.009790365 0.03426585 0.02236372 #> #> Statistics based on eigenvalues: #> setosa versicolor virginica pooled #> product 2.113088e-06 1.893828e-05 0.0001327479 4.732183e-05 #> sum 3.092041e-01 6.248245e-01 0.8883673469 6.074653e-01 #> precision 5.576122e-03 7.338788e-03 0.0169121236 1.304819e-02 #> max 2.364557e-01 4.878739e-01 0.6952548382 4.435659e-01 # visualize (what is done in the plot method) dets <- res$logDet ng <- length(res$logDet)-1 dotchart(dets, xlab = \"log determinant\") points(dets , 1:4, cex=c(rep(1.5, ng), 2.5), pch=c(rep(16, ng), 15), col= c(rep(\"blue\", ng), \"red\")) # formula method boxM( cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) ~ Species, data=iris) #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: Y #> Chi-Sq (approx.) = 140.94, df = 20, p-value < 2.2e-16 #> ### Skulls dat data(Skulls) # lm method skulls.mod <- lm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) boxM(skulls.mod) #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: Y #> Chi-Sq (approx.) = 45.667, df = 40, p-value = 0.2483 #>"},{"path":"https://friendly.github.io/heplots/reference/coefplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Coefficient plots for Multivariate Linear Models — coefplot","title":"Coefficient plots for Multivariate Linear Models — coefplot","text":"Displays confidence ellipses parameters multivariate linear model, given pair variables. , generalization confidenceEllipse.","code":""},{"path":"https://friendly.github.io/heplots/reference/coefplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Coefficient plots for Multivariate Linear Models — coefplot","text":"","code":"coefplot(object, ...) # S3 method for mlm coefplot( object, variables = 1:2, parm = NULL, df = NULL, level = 0.95, intercept = FALSE, Scheffe = FALSE, bars = TRUE, fill = FALSE, fill.alpha = 0.2, labels = !add, label.pos = NULL, xlab, ylab, xlim = NULL, ylim = NULL, axes = TRUE, main = \"\", add = FALSE, lwd = 1, lty = 1, pch = 19, col = palette(), cex = 2, cex.label = 1.5, lty.zero = 3, col.zero = 1, pch.zero = \"+\", verbose = FALSE, ... )"},{"path":"https://friendly.github.io/heplots/reference/coefplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Coefficient plots for Multivariate Linear Models — coefplot","text":"object multivariate linear model, fit lm(cbind(y1, y2, ...) ~ ...) ... parameters passed methods variables Response variables plot, given indices names parm Parameters plot, given indices names df Degrees freedom hypothesis tests level Confidence level confidence ellipses intercept logical. Include intercept? Scheffe TRUE, confidence intervals parameters Scheffe coverage, otherwise, individual coverage. bars Draw univariate confidence intervals variables? fill logical value vector. TRUE means confidence ellipses filled. fill.alpha Opacity confidence ellipses labels Labels confidence ellipses label.pos Positions labels ellipse. See label.ellipse xlab, ylab x, y axis labels xlim, ylim Axis limits axes Draw axes? main Plot title add logical. Add existing plot? lwd Line widths lty Line types pch Point symbols parameter estimates col Colors confidence ellipses, points, lines cex Character size points showing parameter estimates cex.label Character size ellipse labels lty.zero, col.zero, pch.zero Line type, color point symbol horizontal vertical lines 0, 0. verbose logical. Print parameter estimates variance-covariance parameter?","code":""},{"path":"https://friendly.github.io/heplots/reference/coefplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Coefficient plots for Multivariate Linear Models — coefplot","text":"Returns invisibly list coordinates ellipses drawn","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/coefplot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Coefficient plots for Multivariate Linear Models — coefplot","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/coefplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Coefficient plots for Multivariate Linear Models — coefplot","text":"","code":"rohwer.mlm <- lm(cbind(SAT,PPVT,Raven)~n+s+ns, data=Rohwer) coefplot(rohwer.mlm, lwd=2, main=\"Bivariate coefficient plot for SAT and PPVT\", fill=TRUE) coefplot(rohwer.mlm, add=TRUE, Scheffe=TRUE, fill=TRUE) coefplot(rohwer.mlm, var=c(1,3)) mod1 <- lm(cbind(SAT,PPVT,Raven)~n+s+ns+na+ss, data=Rohwer) coefplot(mod1, lwd=2, fill=TRUE, parm=(1:5), main=\"Bivariate 68% coefficient plot for SAT and PPVT\", level=0.68)"},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate column deviations from central values — colDevs","title":"Calculate column deviations from central values — colDevs","text":"colDevs calculates column deviations data values central value (mean, median, etc.), possibly stratified grouping variable.","code":""},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate column deviations from central values — colDevs","text":"","code":"colDevs(x, group, center = mean, ...)"},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate column deviations from central values — colDevs","text":"x numeric data frame matrix. group factor (variable can coerced factor) indicating membership observation x one groups. missing, data treated single group. center function used center values (group group specified. function must take vector argument return scalar result. ... Arguments passed ","code":""},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate column deviations from central values — colDevs","text":"numeric matrix containing deviations centering function.","code":""},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate column deviations from central values — colDevs","text":"Conceptually, function similar column-wise sweep, group, allowing arbitrary center function. Non-numeric columns x removed, warning.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate column deviations from central values — colDevs","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/colDevs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate column deviations from central values — colDevs","text":"","code":"data(iris) Species <- iris$Species irisdev <- colDevs(iris[,1:4], Species, mean) irisdev <- colDevs(iris[,1:4], Species, median) # trimmed mean, using an anonymous function irisdev <- colDevs(iris[,1:4], Species, function(x) mean(x, trim=0.25)) # no grouping variable: deviations from column grand means # include all variables (but suppress warning for this doc) irisdev <- suppressWarnings( colDevs(iris) )"},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"function draws covariance ellipses one groups optionally pooled total sample. uses either classical product-moment covariance estimate, robust alternative, provided cov.rob. Provisions provided two variables, scatterplot matrix format.","code":""},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"","code":"covEllipses(x, ...) # S3 method for data.frame covEllipses( x, group, pooled = TRUE, method = c(\"classical\", \"mve\", \"mcd\"), ... ) # S3 method for matrix covEllipses( x, group, pooled = TRUE, method = c(\"classical\", \"mve\", \"mcd\"), ... ) # S3 method for formula covEllipses(x, data, ...) # S3 method for boxM covEllipses(x, ...) # S3 method for default covEllipses( x, means, df, labels = NULL, variables = 1:2, level = 0.68, segments = 60, center = FALSE, center.pch = \"+\", center.cex = 2, col = getOption(\"heplot.colors\", c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"brown\", \"magenta\", \"darkgray\")), lty = 1, lwd = 2, fill = FALSE, fill.alpha = 0.3, label.pos = 0, xlab, ylab, vlabels, var.cex = 2, main = \"\", xlim, ylim, axes = TRUE, offset.axes, add = FALSE, ... )"},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"x generic argument. default method, list covariance matrices. data.frame matrix methods, numeric matrix two columns supplying variables analyzed. ... arguments passed default method plot, text, points group factor defining groups, vector length n=nrow(x) . missing, single covariance ellipse drawn. pooled Logical; TRUE, pooled covariance matrix total sample also computed plotted method covariance method used: classical product-moment (\"classical\"), minimum volume ellipsoid (\"mve\"), minimum covariance determinant (\"mcd\"). data formula method, data.frame evaluate. means default method, matrix means groups (followed grand means, pooled=TRUE). Rows groups, columns variables. assumed means column names corresponding variables covariance matrices. df default method, vector degrees freedom covariance matrices labels Either character vector labels groups, TRUE, indicating group labels taken names covariance matrices. Use labels=\"\" suppress group labels, e.g., add=TRUE variables indices names response variables plotted; defaults 1:2. two variables supplied, function plots pairwise covariance ellipses scatterplot matrix format. level equivalent coverage data ellipse normally-distributed errors, defaults 0.68. segments number line segments composing ellipse; defaults 40. center TRUE, covariance ellipses centered centroid. center.pch character use plotting centroid data; defaults \"+\". center.cex size character use plotting centroid data; defaults 2. col color vector colors use plotting ellipses --- recycled necessary single color can given, case used ellipses. convenience, default colors plots produced given session can changed assigning color vector via options(heplot.colors =c(...). Otherwise, default colors c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\"). lty vector line types use plotting ellipses; first used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single line type can given. Defaults 2:1. lwd vector line widths use plotting ellipses; first used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single line width can given. Defaults 1:2. fill logical vector indicating whether ellipse filled . first value used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single fill value can given. Defaults FALSE backward compatibility. See Details . fill.alpha Alpha transparency filled ellipses, numeric scalar vector values within [0,1], 0 means fully transparent 1 means fully opaque. Defaults 0.3. label.pos Label position, vector integers (0:4) character strings (c(\"center\", \"bottom\", \"left\", \"top\", \"right\")) use labeling ellipses, recycled necessary. Values 1, 2, 3 4, respectively indicate positions , left , right max/min coordinates ellipse; value 0 specifies centroid ellipse object. default, label.pos=NULL uses correlation ellipse determine \"top\" (r>=0) \"bottom\" (r<0). xlab x-axis label; defaults name x variable. ylab y-axis label; defaults name y variable. vlabels Labels variables can also supplied argument, convenient length(variables) > 2. var.cex character size variable labels pairs plot main main plot label; defaults \"\", presently effect. xlim x-axis limits; absent, computed data. ylim y-axis limits; absent, computed data. axes Whether draw x, y axes; defaults TRUE offset.axes proportion extend axes direction computed data; optional. add TRUE, add current plot; default FALSE. argument effect two variables plotted.","code":""},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"Nothing returned. function used side-effect producing plot.","code":""},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"plot methods provide one way visualize possible heterogeneity within-group covariance matrices one-way MANOVA design. covariance matrices nearly equal, covariance ellipses shape. centered common mean, also overlap. can also used visualize difference classical robust covariance matrices.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/covEllipses.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw classical and robust covariance ellipses for one or more groups — covEllipses","text":"","code":"data(iris) # compare classical and robust covariance estimates covEllipses(iris[,1:4], iris$Species) covEllipses(iris[,1:4], iris$Species, fill=TRUE, method=\"mve\", add=TRUE, labels=\"\") # method for a boxM object x <- boxM(iris[, 1:4], iris[, \"Species\"]) x #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: iris[, 1:4] #> Chi-Sq (approx.) = 140.94, df = 20, p-value < 2.2e-16 #> covEllipses(x, fill=c(rep(FALSE,3), TRUE) ) covEllipses(x, fill=c(rep(FALSE,3), TRUE), center=TRUE, label.pos=1:4 ) # method for a list of covariance matrices cov <- c(x$cov, pooled=list(x$pooled)) df <- c(table(iris$Species)-1, nrow(iris)-3) covEllipses(cov, x$means, df, label.pos=3, fill=c(rep(FALSE,3), TRUE)) covEllipses(cov, x$means, df, label.pos=3, fill=c(rep(FALSE,3), TRUE), center=TRUE) # scatterplot matrix version covEllipses(iris[,1:4], iris$Species, fill=c(rep(FALSE,3), TRUE), variables=1:4, fill.alpha=.1)"},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Chi Square Quantile-Quantile plots — cqplot","title":"Chi Square Quantile-Quantile plots — cqplot","text":"chi square quantile-quantile plots show relationship data-based values distributed \\(\\chi^2\\) corresponding quantiles \\(\\chi^2\\) distribution. multivariate analyses, often used assess multivariate normality check outliers, using Mahalanobis squared distances (\\(D^2\\)) observations centroid.","code":""},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Chi Square Quantile-Quantile plots — cqplot","text":"","code":"cqplot(x, ...) # S3 method for mlm cqplot(x, ...) # S3 method for default cqplot( x, method = c(\"classical\", \"mcd\", \"mve\"), detrend = FALSE, pch = 19, col = palette()[1], cex = par(\"cex\"), ref.col = \"red\", ref.lwd = 2, conf = 0.95, env.col = \"gray\", env.lwd = 2, env.lty = 1, env.fill = TRUE, fill.alpha = 0.2, fill.color = trans.colors(ref.col, fill.alpha), labels = if (!is.null(rownames(x))) rownames(x) else 1:nrow(x), id.n, id.method = \"y\", id.cex = 1, id.col = palette()[1], xlab, ylab, main, what = deparse(substitute(x)), ylim, ... )"},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Chi Square Quantile-Quantile plots — cqplot","text":"x either numeric data frame matrix default method, object class \"mlm\" representing multivariate linear model. latter case, residuals model plotted. ... arguments passed methods method estimation method used center covariance, one : \"classical\" (product-moment), \"mcd\" (minimum covariance determinant), \"mve\" (minimum volume ellipsoid). detrend logical; FALSE, plot shows values \\(D^2\\) vs. \\(\\chi^2\\). TRUE, ordinate shows values \\(D^2 - \\chi^2\\) pch plot symbol points. Can vector length equal number rows x. col color points. Can vector length equal number rows x. default first entry current color palette (see palette par. cex character symbol size points. Can vector length equal number rows x. ref.col Color reference line ref.lwd Line width reference line conf confidence coverage approximate confidence envelope env.col line color boundary confidence envelope env.lwd line width confidence envelope env.lty line type confidence envelope env.fill logical; confidence envelope filled? fill.alpha transparency value fill.color fill.color color used fill confidence envelope labels vector text strings used identify points, defaults rownames(x) observation numbers rownames(x) NULL id.n number points labeled. id.n=0, default, point identification occurs. id.method point identification method. default id.method=\"y\" identify id.n points largest value abs(y-mean(y)). See showLabels options. id.cex size text point labels id.col color point labels xlab label horizontal (theoretical quantiles) axis ylab label vertical (empirical quantiles) axis main plot title name object plotted; used construction main specified. ylim limits vertical axis. specified, range confidence envelope used.","code":""},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Chi Square Quantile-Quantile plots — cqplot","text":"Returns invisibly vector squared Mahalanobis distances corresponding rows x residuals model identified points, else NULL","code":""},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Chi Square Quantile-Quantile plots — cqplot","text":"cqplot general version similar functions packages produce chi square QQ plots. allows classical Mahalanobis squared distances well robust estimates based MVE MCD; provides approximate confidence (concentration) envelope around line unit slope, detrended version, reference line horizontal, ability identify label unusual points, graphical features. method \"mlm\" objects applies residuals model. calculation confidence envelope follows used SAS program, http://www.datavis.ca/sasmac/cqplot.html comes Chambers et al. (1983), Section 6.8. essential formula $$ SE ( z_{()} ) = \\hat{\\delta} /g ( q_i)) \\times \\sqrt{ p_i (1-p_i) / n } $$ \\(z_{()}\\) -th order value \\(D^2\\), \\(\\hat{\\delta}\\) estimate slope reference line obtained corresponding quartiles \\(g(q_i)\\) density chi square distribution quantile \\(q_i\\). Note confidence envelope applies \\(D^2\\) computed using classical estimates location scatter. car::qqPlot() function provides simulated envelopes, univariate measure. Oldford (2016) provides general theory methods QQ plots.","code":""},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Chi Square Quantile-Quantile plots — cqplot","text":"J. Chambers, W. S. Cleveland, B. Kleiner, P. . Tukey (1983). Graphical methods data analysis, Wadsworth. R. W. Oldford (2016), \"Self calibrating quantile-quantile plots\", American Statistician, 70, 74-90.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Chi Square Quantile-Quantile plots — cqplot","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/cqplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Chi Square Quantile-Quantile plots — cqplot","text":"","code":"cqplot(iris[, 1:4]) iris.mod <- lm(as.matrix(iris[,1:4]) ~ Species, data=iris) cqplot(iris.mod, id.n=3) # compare with car::qqPlot car::qqPlot(Mahalanobis(iris[, 1:4]), dist=\"chisq\", df=4) #> [1] 132 135 # Adopted data Adopted.mod <- lm(cbind(Age2IQ, Age4IQ, Age8IQ, Age13IQ) ~ AMED + BMIQ, data=Adopted) cqplot(Adopted.mod, id.n=3) cqplot(Adopted.mod, id.n=3, method=\"mve\") # Sake data Sake.mod <- lm(cbind(taste, smell) ~ ., data=Sake) cqplot(Sake.mod) cqplot(Sake.mod, method=\"mve\", id.n=2) # SocialCog data -- one extreme outlier data(SocialCog) SC.mlm <- lm(cbind(MgeEmotions,ToM, ExtBias, PersBias) ~ Dx, data=SocialCog) cqplot(SC.mlm, id.n=1) # data frame example: stackloss data data(stackloss) cqplot(stackloss[, 1:3], id.n=4) # very strange cqplot(stackloss[, 1:3], id.n=4, detrend=TRUE) cqplot(stackloss[, 1:3], id.n=4, method=\"mve\") cqplot(stackloss[, 1:3], id.n=4, method=\"mcd\")"},{"path":"https://friendly.github.io/heplots/reference/cross3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a 3D cross in an rgl scene — cross3d","title":"Draw a 3D cross in an rgl scene — cross3d","text":"Draws 3D cross axis vectors rgl scene.","code":""},{"path":"https://friendly.github.io/heplots/reference/cross3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a 3D cross in an rgl scene — cross3d","text":"","code":"cross3d(centre = rep(0, 3), scale = rep(1, 3), ...)"},{"path":"https://friendly.github.io/heplots/reference/cross3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a 3D cross in an rgl scene — cross3d","text":"centre scalar vector length 3, giving centre 3D cross scale scalar vector length 3, giving lengths arms 3D cross ... arguments, passed segments3d","code":""},{"path":"https://friendly.github.io/heplots/reference/cross3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw a 3D cross in an rgl scene — cross3d","text":"Used side-effect, returns (invisibly) 6 3 matrix containing end-points three axes, pairs.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/cross3d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw a 3D cross in an rgl scene — cross3d","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/df.terms.html","id":null,"dir":"Reference","previous_headings":"","what":"Find degrees of freedom for model terms — df.terms","title":"Find degrees of freedom for model terms — df.terms","text":"Find degrees freedom model terms","code":""},{"path":"https://friendly.github.io/heplots/reference/df.terms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Find degrees of freedom for model terms — df.terms","text":"","code":"df.terms(model, term, ...) # S3 method for default df.terms(model, term, ...)"},{"path":"https://friendly.github.io/heplots/reference/df.terms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Find degrees of freedom for model terms — df.terms","text":"model model object, fit using lm. term One terms model ... arguments, ignored","code":""},{"path":"https://friendly.github.io/heplots/reference/Diabetes.html","id":null,"dir":"Reference","previous_headings":"","what":"Diabetes Dataset — Diabetes","title":"Diabetes Dataset — Diabetes","text":"Reaven Miller (1979) examined relationship among blood chemistry measures glucose tolerance insulin 145 nonobese adults. used PRIM9 system Stanford Linear Accelerator Center visualize data 3D, discovered peculiar pattern looked like large blob two wings different directions.","code":""},{"path":"https://friendly.github.io/heplots/reference/Diabetes.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Diabetes Dataset — Diabetes","text":"data frame 145 observations following 6 variables. relwt relative weight, expressed ratio actual weight expected weight, given person's height, numeric vector glufast fasting plasma glucose level, numeric vector glutest test plasma glucose level, measure glucose intolerance, numeric vector instest plasma insulin test, measure insulin response oral glucose, numeric vector sspg steady state plasma glucose, measure insulin resistance, numeric vector group diagnostic group, factor levels Normal Chemical_Diabetic Overt_Diabetic","code":""},{"path":"https://friendly.github.io/heplots/reference/Diabetes.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Diabetes Dataset — Diabetes","text":"Andrews, D. F. & Herzberg, . M. (1985). Data: Collection Problems Many Fields Student Research Worker, Springer-Verlag, Ch. 36. Friendly, M. (1991). SAS System Statistical Graphics, Cary, NC: SAS Institute.","code":""},{"path":"https://friendly.github.io/heplots/reference/Diabetes.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Diabetes Dataset — Diabetes","text":"analysis, subjects classified subclinical (chemical) diabetics, overt diabetics normals. study influential defining stages development Type 2 diabetes. Overt diabetes advanced stage, characterized elevated fasting blood glucose concentration classical symptoms. Preceding overt diabetes latent chemical diabetic stage, symptoms diabetes demonstrable abnormality oral intravenous glucose tolerance. glutest defined \"area plasma glucose curve three hour oral glucose tolerance test.\" Reaven & Miller refer variable \"Glucose area\". instest defined \"area plasma insulin curve\", referred paper \"Insulin area\". study influential defining stages development Type 2 diabetes. Overt diabetes advanced stage, characterized elevated fasting blood glucose concentration classical symptoms. Preceding overt diabetes latent chemical diabetic stage, symptoms diabetes demonstrable abnormality oral intravenous glucose tolerance.","code":""},{"path":"https://friendly.github.io/heplots/reference/Diabetes.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Diabetes Dataset — Diabetes","text":"Reaven, G. M. Miller, R. G. (1979). attempt define nature chemical diabetes using multidimensional analysis. Diabetologia, 16, 17-24.","code":""},{"path":"https://friendly.github.io/heplots/reference/Diabetes.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Diabetes Dataset — Diabetes","text":"","code":"data(Diabetes) col <- c(\"blue\", \"red\", \"darkgreen\")[Diabetes$group] pch <- c(16,15,17)[Diabetes$group] # a perplexing plot, similar to Fig 2, but with a loess smooth plot(instest ~ glutest, data=Diabetes, pch=16, cex.lab=1.25, xlab=\"Glucose area (glutest)\", ylab=\"Insulin area (instest)\") lines( loess.smooth(Diabetes$glutest, Diabetes$instest), col=\"blue\", lwd=2) # scatterplot matrix, colored by group plot(Diabetes[,1:5], col=col, pch=pch) # covariance ellipses covEllipses(Diabetes[,2:5], Diabetes$group, fill=TRUE, pooled=FALSE, col=col) covEllipses(Diabetes[,2:5], Diabetes$group, fill=TRUE, pooled=FALSE, col=col, variables=1:4) # Box's M test diab.boxm <- boxM(Diabetes[,2:5], Diabetes$group) diab.boxm #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: Diabetes[, 2:5] #> Chi-Sq (approx.) = 382.84, df = 20, p-value < 2.2e-16 #> plot(diab.boxm) # heplots diab.mlm <- lm(cbind(glufast, glutest, instest, sspg) ~ group, data=Diabetes) heplot(diab.mlm) pairs(diab.mlm, fill=TRUE, fill.alpha=0.1)"},{"path":"https://friendly.github.io/heplots/reference/ellipse.axes.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","title":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","text":"function draw principal axes 2D ellipse correlation, covariance sums squares cross products matrix existing plot.","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse.axes.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","text":"","code":"ellipse.axes( x, centre = c(0, 0), center = center, scale = c(1, 1), which = 1:2, level = 0.95, radius = sqrt(qchisq(level, 2)), labels = TRUE, label.ends = c(2, 4), label.pos = c(2, 4, 1, 3), ... )"},{"path":"https://friendly.github.io/heplots/reference/ellipse.axes.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","text":"x square positive definite matrix least 2x2 size. treated correlation covariance multivariate normal distribution. centre, center center ellipse scale x correlation matrix, standard deviations parameter can given scale parameter. defaults c(1, 1), rescaling done. integer vector select variables object x plotted. default first 2. level coverage level simultaneous region ellipse. default 0.95, 95% region. used control size ellipse. radius size ellipsoid may also controlled specifying value t-statistic boundary. defaults square root chi-square statistic given level 2 degrees freedom, however small sample n observations, accurate value sqrt(2 * qf(level, 2, n - 1 )). labels Either logical value, character string, character vector length 2. TRUE, default, axes labeled \"PC1\", \"PC2\". single character string, digits 1, 2 pasted end. label.ends vector indices range 1:4 indicating ends axes labeled, corresponding selection rows 4 x 2 matrix axes end points. Values 1:2 represent minimum maximum first dimension respectively. Values 3:4 represent minimum maximum second dimension. Default: c(2, 4). label.pos Positions text labels relative ends axes used text four possible label.ends. 1, 2, 3, 4 represent , left, right. default, c(2, 4, 1, 3), positions labels outside axes. ... arguments passed lines text.","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse.axes.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","text":"Invisibly returns 4 x 2 matrix containing end points axes pairs (min, max) rows.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/ellipse.axes.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse.axes.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw Axes of a 2D Covariance Ellipse — ellipse.axes","text":"","code":"data(iris) cov <- cov(iris[,1:2]) mu <- colMeans(iris[,1:2]) radius <- sqrt(qchisq(0.68, 2)) plot(iris[,1:2], asp=1) car::ellipse(mu, cov, radius = radius) res <- ellipse.axes(cov, center=mu, level = 0.68, labels = TRUE) res #> Sepal.Length Sepal.Width #> Xmin -1.24882344 0.1061294 #> Xmax 1.24882344 -0.1061294 #> Ymin -0.05518532 -0.6493648 #> Ymax 0.05518532 0.6493648"},{"path":"https://friendly.github.io/heplots/reference/ellipse.box.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw Conjugate Axes and Parallelogram Surrounding a Covariance Ellipse — ellipse.box","title":"Draw Conjugate Axes and Parallelogram Surrounding a Covariance Ellipse — ellipse.box","text":"Draw Conjugate Axes Parallelogram Surrounding Covariance Ellipse","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse.box.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw Conjugate Axes and Parallelogram Surrounding a Covariance Ellipse — ellipse.box","text":"","code":"ellipse.box( x, center = c(0, 0), which = 1:2, level = 0.95, radius = sqrt(qchisq(level, 2)), factor = c(\"cholesky\", \"pca\"), draw = c(\"box\", \"diameters\", \"both\"), ... )"},{"path":"https://friendly.github.io/heplots/reference/ellipse.box.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw Conjugate Axes and Parallelogram Surrounding a Covariance Ellipse — ellipse.box","text":"x square positive definite matrix least 2x2 size. treated correlation covariance multivariate normal distribution. center center ellipse integer vector select variables object x plotted. default first 2. level coverage level simultaneous region ellipse. default 0.95, 95% region. used control size ellipse. radius size ellipsoid may also controlled specifying value t-statistic boundary. defaults square root chi-square statistic given level 2 degrees freedom, however small sample n observations, accurate value sqrt(2 * qf(level, 2, n - 1 )). factor function defining conjugate axes used transform unit circle ellipse. chol, uses right Cholesky factor x. draw draw? \"box\", \"diameters\" \"\" ... arguments passed lines.","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse.box.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw Conjugate Axes and Parallelogram Surrounding a Covariance Ellipse — ellipse.box","text":"Invisibly returns 2 column matrix containing end points lines.","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse.box.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw Conjugate Axes and Parallelogram Surrounding a Covariance Ellipse — ellipse.box","text":"","code":"data(iris) cov <- cov(iris[,3:4]) mu <- colMeans(iris[,3:4]) radius <- sqrt(qchisq(0.68, 2)) plot(iris[,3:4], asp=1) car::ellipse(mu, cov, radius = radius) ellipse.axes(cov, center=mu, level = 0.68, labels = TRUE) ellipse.box(cov, center=mu, level = 0.68, factor = \"pca\", col = \"red\", lwd = 2 ) res <- ellipse.box(cov, center=mu, level = 0.68, factor = \"chol\", col = \"green\", lwd = 2 ) res #> Petal.Length Petal.Width #> [1,] 6.42288 2.6179312 #> [2,] 1.09312 0.4020543 #> [3,] 1.09312 -0.2192645 #> [4,] 6.42288 1.9966124 #> [5,] 6.42288 2.6179312"},{"path":"https://friendly.github.io/heplots/reference/ellipse3d.axes.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw axes of a 3D ellipsoid — ellipse3d.axes","title":"Draw axes of a 3D ellipsoid — ellipse3d.axes","text":"function draw major axes 3D ellipsoid correlation, covariance sums squares cross products matrix.","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse3d.axes.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw axes of a 3D ellipsoid — ellipse3d.axes","text":"","code":"ellipse3d.axes( x, centre = c(0, 0, 0), center = centre, scale = c(1, 1, 1), level = 0.95, t = sqrt(qchisq(level, 3)), which = 1:3, labels = TRUE, label.ends = c(2, 4, 6), ... )"},{"path":"https://friendly.github.io/heplots/reference/ellipse3d.axes.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw axes of a 3D ellipsoid — ellipse3d.axes","text":"x square positive definite matrix least 3x3 size. treated correlation covariance multivariate normal distribution. centre, center center ellipse scale x correlation matrix, standard deviations parameter can given scale parameter. defaults c(1, 1, 1), rescaling done. level coverage level simultaneous region. default 0.95, 95% region. used control size ellipsoid. t size ellipsoid may also controlled specifying value t-statistic boundary, defaults square root chi-square statistic given level 3 degrees freedom. integer vector select variables object plotted. default first 3. labels Either logical value, character string, character vector length 3. TRUE, default, axes labeled PC1, PC2, PC3. single character string, digits 1, 2, 3 pasted end. label.ends vector length 3 indicating ends axes labeled, corresponding selection rows 6 x 3 matrix axes end points. Default: c(2,4,6). ... arguments passed segments3d text3d.","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse3d.axes.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw axes of a 3D ellipsoid — ellipse3d.axes","text":"Returns 6 x 3 matrix containing end points three axis lines pairs rows.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/ellipse3d.axes.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw axes of a 3D ellipsoid — ellipse3d.axes","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/ellipse3d.axes.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw axes of a 3D ellipsoid — ellipse3d.axes","text":"3D plot","code":"data(iris) iris3 <- iris[,1:3] cov <- cov(iris3) mu <- colMeans(iris3) col <-c(\"blue\", \"green\", \"red\")[iris$Species] library(rgl) #> Warning: package 'rgl' was built under R version 4.3.3 #> #> Attaching package: 'rgl' #> The following objects are masked from 'package:heplots': #> #> arrow3d, bbox3d plot3d(iris3, type=\"s\", size=0.4, col=col, cex=2, box=FALSE, aspect=\"iso\") plot3d( ellipse3d(cov, centre=mu, level=0.68), col=\"gray\", alpha=0.2, add = TRUE) 3D plot {\"x\":{\"material\":{\"color\":\"#000000\",\"alpha\":1,\"lit\":true,\"ambient\":\"#000000\",\"specular\":\"#FFFFFF\",\"emission\":\"#000000\",\"shininess\":50,\"smooth\":true,\"front\":\"filled\",\"back\":\"filled\",\"size\":3,\"lwd\":1,\"fog\":true,\"point_antialias\":false,\"line_antialias\":false,\"texture\":null,\"textype\":\"rgb\",\"texmode\":\"modulate\",\"texmipmap\":false,\"texminfilter\":\"linear\",\"texmagfilter\":\"linear\",\"texenvmap\":false,\"depth_mask\":true,\"depth_test\":\"less\",\"isTransparent\":false,\"polygon_offset\":[0,0],\"margin\":\"\",\"floating\":false,\"tag\":\"\",\"blend\":[\"src_alpha\",\"one_minus_src_alpha\"]},\"rootSubscene\":1,\"objects\":{\"38\":{\"id\":38,\"type\":\"spheres\",\"material\":{},\"vertices\":\"0\",\"colors\":\"1\",\"radii\":[[0.02816091291606426]],\"centers\":\"2\",\"ignoreExtent\":false,\"fastTransparency\":true,\"flags\":32771},\"40\":{\"id\":40,\"type\":\"text\",\"material\":{\"lit\":false,\"margin\":0,\"floating\":true,\"edge\":[0,1,1]},\"vertices\":\"3\",\"colors\":\"4\",\"texts\":[[\"Sepal.Length\"]],\"cex\":[[1]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"5\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":true,\"flags\":33808},\"41\":{\"id\":41,\"type\":\"text\",\"material\":{\"lit\":false,\"margin\":1,\"floating\":true,\"edge\":[1,1,1]},\"vertices\":\"6\",\"colors\":\"7\",\"texts\":[[\"Sepal.Width\"]],\"cex\":[[1]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"8\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":true,\"flags\":33808},\"42\":{\"id\":42,\"type\":\"text\",\"material\":{\"lit\":false,\"margin\":2,\"floating\":true,\"edge\":[1,1,1]},\"vertices\":\"9\",\"colors\":\"10\",\"texts\":[[\"Petal.Length\"]],\"cex\":[[1]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"11\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":true,\"flags\":33808},\"43\":{\"id\":43,\"type\":\"quads\",\"material\":{\"alpha\":0.2000000029802322,\"isTransparent\":true},\"vertices\":\"12\",\"colors\":\"14\",\"centers\":\"15\",\"normals\":\"13\",\"ignoreExtent\":false,\"flags\":32811},\"5\":{\"id\":5,\"type\":\"light\",\"vertices\":[[0,0,1]],\"colors\":[[1,1,1,1],[1,1,1,1],[1,1,1,1]],\"viewpoint\":true,\"finite\":false},\"9\":{\"id\":9,\"type\":\"background\",\"material\":{\"lit\":false,\"back\":\"lines\"},\"colors\":\"16\",\"centers\":\"17\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"39\":{\"id\":39,\"type\":\"bboxdeco\",\"material\":{\"front\":\"lines\",\"back\":\"lines\"},\"vertices\":\"18\",\"colors\":\"19\",\"axes\":{\"mode\":[\"pretty\",\"pretty\",\"pretty\"],\"step\":[1,0.5,1],\"nticks\":[5,5,5],\"marklen\":[15,15,15],\"expand\":[1.029999971389771,1.029999971389771,1.029999971389771]},\"draw_front\":false,\"flags\":32769},\"1\":{\"id\":1,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":1,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,19.43376731872559],\"modelMatrix\":[[1,0,0,-6.099999904632568],[0,0.9659258127212524,-0.258819043636322,-2.11832070350647],[0,0.258819043636322,0.9659258127212524,-23.89193725585938],[0,0,0,1]],\"projMatrix\":[[3.732050895690918,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-70.05648040771484],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.9659258127212524,-0.258819043636322,0],[0,0.258819043636322,0.9659258127212524,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[4.271839141845703,7.928161144256592,1.971839070320129,4.428161144256592,0.4538158178329468,7.06218433380127],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"replace\"},\"objects\":[9,39,38,40,41,42,43,5],\"subscenes\":[],\"flags\":34107}},\"crosstalk\":{\"key\":[],\"group\":[],\"id\":[],\"options\":[]},\"width\":700,\"height\":700,\"buffer\":{\"accessors\":[{\"bufferView\":0,\"componentType\":5126,\"count\":150,\"type\":\"VEC3\"},{\"bufferView\":1,\"componentType\":5121,\"count\":150,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":2,\"componentType\":5126,\"count\":150,\"type\":\"VEC3\"},{\"bufferView\":3,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":4,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":5,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":6,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":7,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":8,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":9,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":10,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":11,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":12,\"componentType\":5126,\"count\":1536,\"type\":\"VEC3\"},{\"bufferView\":13,\"componentType\":5126,\"count\":1536,\"type\":\"VEC3\"},{\"bufferView\":14,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":15,\"componentType\":5126,\"count\":384,\"type\":\"VEC3\"},{\"bufferView\":16,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":17,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":18,\"componentType\":5126,\"count\":15,\"type\":\"VEC3\"},{\"bufferView\":19,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":1800,\"byteOffset\":0},{\"buffer\":0,\"byteLength\":600,\"byteOffset\":1800},{\"buffer\":0,\"byteLength\":1800,\"byteOffset\":2400},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":4200},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":4212},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":4216},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":4228},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":4240},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":4244},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":4256},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":4268},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":4272},{\"buffer\":0,\"byteLength\":18432,\"byteOffset\":4284},{\"buffer\":0,\"byteLength\":18432,\"byteOffset\":22716},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":41148},{\"buffer\":0,\"byteLength\":4608,\"byteOffset\":41164},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":45772},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":45776},{\"buffer\":0,\"byteLength\":180,\"byteOffset\":45780},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":45960}],\"buffers\":[{\"byteLength\":45964,\"bytes\":\"MzOjQAAAYEAzM7M/zcycQAAAQEAzM7M/ZmaWQM3MTEBmZqY/MzOTQGZmRkAAAMA/AACgQGZm\\nZkAzM7M/zcysQJqZeUCamdk/MzOTQJqZWUAzM7M/AACgQJqZWUAAAMA/zcyMQJqZOUAzM7M/\\nzcycQGZmRkAAAMA/zcysQM3MbEAAAMA/mpmZQJqZWUDNzMw/mpmZQAAAQEAzM7M/mpmJQAAA\\nQEDNzIw/mpm5QAAAgECamZk/Zma2QM3MjEAAAMA/zcysQJqZeUBmZqY/MzOjQAAAYEAzM7M/\\nZma2QDMzc0Camdk/MzOjQDMzc0AAAMA/zcysQJqZWUCamdk/MzOjQM3MbEAAAMA/MzOTQGZm\\nZkAAAIA/MzOjQDMzU0Camdk/mpmZQJqZWUAzM/M/AACgQAAAQEDNzMw/AACgQJqZWUDNzMw/\\nZmamQAAAYEAAAMA/ZmamQJqZWUAzM7M/ZmaWQM3MTEDNzMw/mpmZQGZmRkDNzMw/zcysQJqZ\\nWUAAAMA/ZmamQDMzg0AAAMA/AACwQGZmhkAzM7M/zcycQGZmRkAAAMA/AACgQM3MTECamZk/\\nAACwQAAAYEBmZqY/zcycQGZmZkAzM7M/zcyMQAAAQEBmZqY/MzOjQJqZWUAAAMA/AACgQAAA\\nYEBmZqY/AACQQDMzE0BmZqY/zcyMQM3MTEBmZqY/AACgQAAAYEDNzMw/MzOjQDMzc0AzM/M/\\nmpmZQAAAQEAzM7M/MzOjQDMzc0DNzMw/MzOTQM3MTEAzM7M/mpmpQM3MbEAAAMA/AACgQDMz\\nU0AzM7M/AADgQM3MTEBmZpZAzczMQM3MTEAAAJBAzczcQGZmRkDNzJxAAACwQDMzE0AAAIBA\\nAADQQDMzM0AzM5NAZma2QDMzM0AAAJBAmpnJQDMzU0BmZpZAzcycQJqZGUAzM1NAMzPTQJqZ\\nOUAzM5NAZmamQM3MLECamXlAAACgQAAAAEAAAGBAzcy8QAAAQEBmZoZAAADAQM3MDEAAAIBA\\nMzPDQJqZOUBmZpZAMzOzQJqZOUBmZmZAZmbWQGZmRkDNzIxAMzOzQAAAQEAAAJBAmpm5QM3M\\nLEAzM4NAZmbGQM3MDEAAAJBAMzOzQAAAIECamXlAzcy8QM3MTECamZlAMzPDQDMzM0AAAIBA\\nmpnJQAAAIEDNzJxAMzPDQDMzM0BmZpZAzczMQJqZOUCamYlAMzPTQAAAQEDNzIxAmpnZQDMz\\nM0CamZlAZmbWQAAAQEAAAKBAAADAQJqZOUAAAJBAZma2QGZmJkAAAGBAAACwQJqZGUAzM3NA\\nAACwQJqZGUDNzGxAmpm5QM3MLECamXlAAADAQM3MLEAzM6NAzcysQAAAQEAAAJBAAADAQJqZ\\nWUAAAJBAZmbWQGZmRkBmZpZAmpnJQDMzE0DNzIxAMzOzQAAAQEAzM4NAAACwQAAAIEAAAIBA\\nAACwQGZmJkDNzIxAMzPDQAAAQEAzM5NAmpm5QGZmJkAAAIBAAACgQDMzE0AzM1NAMzOzQM3M\\nLEBmZoZAZma2QAAAQEBmZoZAZma2QJqZOUBmZoZAZmbGQJqZOUCamYlAMzOjQAAAIEAAAEBA\\nZma2QDMzM0AzM4NAmpnJQDMzU0AAAMBAmpm5QM3MLEAzM6NAMzPjQAAAQEDNzLxAmpnJQJqZ\\nOUAzM7NAAADQQAAAQECamblAMzPzQAAAQEAzM9NAzcycQAAAIEAAAJBAmpnpQJqZOUCamclA\\nZmbWQAAAIECamblAZmbmQGZmZkAzM8NAAADQQM3MTEAzM6NAzczMQM3MLECamalAmpnZQAAA\\nQEAAALBAZma2QAAAIEAAAKBAmpm5QDMzM0AzM6NAzczMQM3MTECamalAAADQQAAAQEAAALBA\\nZmb2QDMzc0BmZtZAZmb2QGZmJkDNzNxAAADAQM3MDEAAAKBAzczcQM3MTEBmZrZAMzOzQDMz\\nM0DNzJxAZmb2QDMzM0BmZtZAmpnJQM3MLEDNzJxAZmbWQDMzU0BmZrZAZmbmQM3MTEAAAMBA\\nZmbGQDMzM0CamZlAMzPDQAAAQEDNzJxAzczMQDMzM0AzM7NAZmbmQAAAQECamblAzczsQDMz\\nM0AzM8NAzcz8QDMzc0DNzMxAzczMQDMzM0AzM7NAmpnJQDMzM0AzM6NAMzPDQGZmJkAzM7NA\\nZmb2QAAAQEAzM8NAmpnJQJqZWUAzM7NAzczMQGZmRkAAALBAAADAQAAAQECamZlAzczcQGZm\\nRkDNzKxAZmbWQGZmRkAzM7NAzczcQGZmRkAzM6NAmpm5QM3MLEAzM6NAmpnZQM3MTEDNzLxA\\nZmbWQDMzU0BmZrZAZmbWQAAAQEBmZqZAmpnJQAAAIEAAAKBAAADQQAAAQEBmZqZAZmbGQJqZ\\nWUDNzKxAzcy8QAAAQEAzM6NAAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//\\nAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA\\n//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//\\nAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA\\n//8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/\\nAP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/\\nAP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/\\nAP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A//8AAP//AAD//wAA//8A\\nAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/\\n/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A\\nAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/\\n/wAA//8AAP//AAD//wAA//8AAP//AAD/MzOjQAAAYEAzM7M/zcycQAAAQEAzM7M/ZmaWQM3M\\nTEBmZqY/MzOTQGZmRkAAAMA/AACgQGZmZkAzM7M/zcysQJqZeUCamdk/MzOTQJqZWUAzM7M/\\nAACgQJqZWUAAAMA/zcyMQJqZOUAzM7M/zcycQGZmRkAAAMA/zcysQM3MbEAAAMA/mpmZQJqZ\\nWUDNzMw/mpmZQAAAQEAzM7M/mpmJQAAAQEDNzIw/mpm5QAAAgECamZk/Zma2QM3MjEAAAMA/\\nzcysQJqZeUBmZqY/MzOjQAAAYEAzM7M/Zma2QDMzc0Camdk/MzOjQDMzc0AAAMA/zcysQJqZ\\nWUCamdk/MzOjQM3MbEAAAMA/MzOTQGZmZkAAAIA/MzOjQDMzU0Camdk/mpmZQJqZWUAzM/M/\\nAACgQAAAQEDNzMw/AACgQJqZWUDNzMw/ZmamQAAAYEAAAMA/ZmamQJqZWUAzM7M/ZmaWQM3M\\nTEDNzMw/mpmZQGZmRkDNzMw/zcysQJqZWUAAAMA/ZmamQDMzg0AAAMA/AACwQGZmhkAzM7M/\\nzcycQGZmRkAAAMA/AACgQM3MTECamZk/AACwQAAAYEBmZqY/zcycQGZmZkAzM7M/zcyMQAAA\\nQEBmZqY/MzOjQJqZWUAAAMA/AACgQAAAYEBmZqY/AACQQDMzE0BmZqY/zcyMQM3MTEBmZqY/\\nAACgQAAAYEDNzMw/MzOjQDMzc0AzM/M/mpmZQAAAQEAzM7M/MzOjQDMzc0DNzMw/MzOTQM3M\\nTEAzM7M/mpmpQM3MbEAAAMA/AACgQDMzU0AzM7M/AADgQM3MTEBmZpZAzczMQM3MTEAAAJBA\\nzczcQGZmRkDNzJxAAACwQDMzE0AAAIBAAADQQDMzM0AzM5NAZma2QDMzM0AAAJBAmpnJQDMz\\nU0BmZpZAzcycQJqZGUAzM1NAMzPTQJqZOUAzM5NAZmamQM3MLECamXlAAACgQAAAAEAAAGBA\\nzcy8QAAAQEBmZoZAAADAQM3MDEAAAIBAMzPDQJqZOUBmZpZAMzOzQJqZOUBmZmZAZmbWQGZm\\nRkDNzIxAMzOzQAAAQEAAAJBAmpm5QM3MLEAzM4NAZmbGQM3MDEAAAJBAMzOzQAAAIECamXlA\\nzcy8QM3MTECamZlAMzPDQDMzM0AAAIBAmpnJQAAAIEDNzJxAMzPDQDMzM0BmZpZAzczMQJqZ\\nOUCamYlAMzPTQAAAQEDNzIxAmpnZQDMzM0CamZlAZmbWQAAAQEAAAKBAAADAQJqZOUAAAJBA\\nZma2QGZmJkAAAGBAAACwQJqZGUAzM3NAAACwQJqZGUDNzGxAmpm5QM3MLECamXlAAADAQM3M\\nLEAzM6NAzcysQAAAQEAAAJBAAADAQJqZWUAAAJBAZmbWQGZmRkBmZpZAmpnJQDMzE0DNzIxA\\nMzOzQAAAQEAzM4NAAACwQAAAIEAAAIBAAACwQGZmJkDNzIxAMzPDQAAAQEAzM5NAmpm5QGZm\\nJkAAAIBAAACgQDMzE0AzM1NAMzOzQM3MLEBmZoZAZma2QAAAQEBmZoZAZma2QJqZOUBmZoZA\\nZmbGQJqZOUCamYlAMzOjQAAAIEAAAEBAZma2QDMzM0AzM4NAmpnJQDMzU0AAAMBAmpm5QM3M\\nLEAzM6NAMzPjQAAAQEDNzLxAmpnJQJqZOUAzM7NAAADQQAAAQECamblAMzPzQAAAQEAzM9NA\\n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\\nb0B16yFAy7GZQDaYakDJ5rw/JLabQIA8aEBnuuY/8LSjQOdabUDvJApA+ZSiQH+HcECIBu4/\\nlvy6QK1YaEBz03VAlvy6QIuXb0B3pV5A3C2yQJ8tcEAheT1AyrOyQFrbaECh9VZAlvy6QG4q\\ndEBg40pAC6+xQCdvdED5GClA3C2yQJ8tcEAheT1Alvy6QIuXb0B3pV5A2xKqQOE0c0D+Cw9A\\nJLqqQGqFb0B16yFA3C2yQJ8tcEAheT1AC6+xQCdvdED5GClANFarQDhpaEDRYjtAyrOyQFrb\\naECh9VZA3C2yQJ8tcEAheT1AJLqqQGqFb0B16yFAlvy6QNyJd0AmFCtAJg+yQAHMd0CXBwtA\\nadCxQJ/edkBfoBlAlvy6QCOxdkDEDjpAN2OpQA9YdkAwXNw/Z6SpQPNtdUAMef0/adCxQJ/e\\ndkBfoBlAJg+yQAHMd0CXBwtA2xKqQOE0c0D+Cw9AC6+xQCdvdED5GClAadCxQJ/edkBfoBlA\\nZ6SpQPNtdUAMef0/lvy6QG4qdEBg40pAlvy6QCOxdkDEDjpAadCxQJ/edkBfoBlAC6+xQCdv\\ndED5GClATOeXQEmwbEA7EHQ/YmWYQN4cbECbxJg/5E+hQA5EckATPsk/dZigQL/bckBqP6c/\\ny7GZQDaYakDJ5rw/+ZSiQH+HcECIBu4/5E+hQA5EckATPsk/YmWYQN4cbECbxJg/2xKqQOE0\\nc0D+Cw9AZ6SpQPNtdUAMef0/5E+hQA5EckATPsk/+ZSiQH+HcECIBu4/N2OpQA9YdkAwXNw/\\ndZigQL/bckBqP6c/5E+hQA5EckATPsk/Z6SpQPNtdUAMef0/x6HXQBMSXkAnqa9ACUPaQJd+\\nYEB+7a1APETSQKiXZ0CumZtApXfRQD+VYUBIZ6RAYUfcQHxaYkDG96pAM2TTQPd8akAsN5ZA\\nPETSQKiXZ0CumZtACUPaQJd+YEB+7a1AUubLQBkFb0AIY4ZACD/LQAx/a0D7ZI1APETSQKiX\\nZ0CumZtAM2TTQPd8akAsN5ZA+KLKQHuJZECY3JdApXfRQD+VYUBIZ6RAPETSQKiXZ0CumZtA\\nCD/LQAx/a0D7ZI1A4BHeQBEBZEBG6KBAt2DVQFdTbEB754tASanUQA7pa0BbvZFAy5PdQNyM\\nY0DCwqZA9ZXMQM38cUDSAXFAxVTMQNUicUCqq39ASanUQA7pa0BbvZFAt2DVQFdTbEB754tA\\n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\\nb3npvlgKWD/QtJC+08FZvr0AdT9n1Em+IbL8vTe1ET4ta3u/GlM6v4rGDz/QeMm+b3npvlgK\\nWD/QtJC+8vllO2n8KT9qaj+/PNNLvyzkGj8AAAAAqTccv4DPSj8AAAAAb3npvlgKWD/QtJC+\\nGlM6v4rGDz/QeMm+uqOUPjLoZr/eo6O+NUi0PofYYb+mDaC+U25ePvg/cb/7Q4K+mTwiPniC\\ncr9vjI6+mXLOPlvQXL++fJy+ZemLPu4Hbr8ydXy+U25ePvg/cb/7Q4K+NUi0PofYYb+mDaC+\\nD5ATPpCveL9ZGUG+hcSaPbFKer86oUi+U25ePvg/cb/7Q4K+ZemLPu4Hbr8ydXy+aK92vHXc\\neb/oXl6+mTwiPniCcr9vjI6+U25ePvg/cb/7Q4K+hcSaPbFKer86oUi+nvj6PmNSUr89DZW+\\n4U3IPvFvY79M23W+YuCpPslLab9Ln3m+jhnlPnjLV78q7pi+QD+NPta3cb/0Mzi+Y15SPqcW\\ndr+XEDy+YuCpPslLab9Ln3m+4U3IPvFvY79M23W+D5ATPpCveL9ZGUG+ZemLPu4Hbr8ydXy+\\nYuCpPslLab9Ln3m+Y15SPqcWdr+XEDy+mXLOPlvQXL++fJy+jhnlPnjLV78q7pi+YuCpPslL\\nab9Ln3m+ZemLPu4Hbr8ydXy+A/98vd6Cf78AAAAABVEfvvbhfL8AAAAA1A1pPfAMfr+KvN+9\\ndQ0IPjtSfL86otW9Me2AvjjAd78AAAAATlRivFRDfr/qe+y91A1pPfAMfr+KvN+9BVEfvvbh\\nfL8AAAAAD5ATPpCveL9ZGUG+Y15SPqcWdr+XEDy+1A1pPfAMfr+KvN+9TlRivFRDfr/qe+y9\\nQD+NPta3cb/0Mzi+dQ0IPjtSfL86otW91A1pPfAMfr+KvN+9Y15SPqcWdr+XEDy+LjMBv2EB\\nXb8AAAAA2Kxxvsqadr/H8gK+cZzevbmrfL+aivK9zyC6viZ8br8AAAAAaK92vHXceb/oXl6+\\nhcSaPbFKer86oUi+cZzevbmrfL+aivK92Kxxvsqadr/H8gK+D5ATPpCveL9ZGUG+TlRivFRD\\nfr/qe+y9cZzevbmrfL+aivK9hcSaPbFKer86oUi+Me2AvjjAd78AAAAAzyC6viZ8br8AAAAA\\ncZzevbmrfL+aivK9TlRivFRDfr/qe+y9jXwiP6h2Or/KJIS+8gkcP222Qr8I6GS+xPQHP6tq\\n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\\nwH8AAOBAAAAAAQ==\"}]},\"context\":{\"shiny\":false,\"rmarkdown\":null},\"vertexShader\":\"#line 2 1\\n// File 1 is the vertex shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\n\\nattribute vec3 aPos;\\nattribute vec4 aCol;\\nuniform mat4 mvMatrix;\\nuniform mat4 prMatrix;\\nvarying vec4 vCol;\\nvarying vec4 vPosition;\\n\\n#ifdef NEEDS_VNORMAL\\nattribute vec3 aNorm;\\nuniform mat4 normMatrix;\\nvarying vec4 vNormal;\\n#endif\\n\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nattribute vec2 aTexcoord;\\nvarying vec2 vTexcoord;\\n#endif\\n\\n#ifdef FIXED_SIZE\\nuniform vec3 textScale;\\n#endif\\n\\n#ifdef FIXED_QUADS\\nattribute vec3 aOfs;\\n#endif\\n\\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\nvarying float normz;\\nuniform mat4 invPrMatrix;\\n#else\\nattribute vec3 aPos1;\\nattribute vec3 aPos2;\\nvarying float normz;\\n#endif\\n#endif // IS_TWOSIDED\\n\\n#ifdef FAT_LINES\\nattribute vec3 aNext;\\nattribute vec2 aPoint;\\nvarying vec2 vPoint;\\nvarying float vLength;\\nuniform float uAspect;\\nuniform float uLwd;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n \\n#ifndef IS_BRUSH\\n#if defined(NCLIPPLANES) || !defined(FIXED_QUADS) || defined(HAS_FOG) || defined(USE_ENVMAP)\\n vPosition = mvMatrix * vec4(aPos, 1.);\\n#endif\\n \\n#ifndef FIXED_QUADS\\n gl_Position = prMatrix * vPosition;\\n#endif\\n#endif // !IS_BRUSH\\n \\n#ifdef IS_POINTS\\n gl_PointSize = POINTSIZE;\\n#endif\\n \\n vCol = aCol;\\n \\n// USE_ENVMAP implies NEEDS_VNORMAL\\n\\n#ifdef NEEDS_VNORMAL\\n vNormal = normMatrix * vec4(-aNorm, dot(aNorm, aPos));\\n#endif\\n\\n#ifdef USE_ENVMAP\\n vReflection = normalize(reflect(vPosition.xyz/vPosition.w, \\n normalize(vNormal.xyz/vNormal.w)));\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\n /* normz should be calculated *after* projection */\\n normz = (invPrMatrix*vNormal).z;\\n#else\\n vec4 pos1 = prMatrix*(mvMatrix*vec4(aPos1, 1.));\\n pos1 = pos1/pos1.w - gl_Position/gl_Position.w;\\n vec4 pos2 = prMatrix*(mvMatrix*vec4(aPos2, 1.));\\n pos2 = pos2/pos2.w - gl_Position/gl_Position.w;\\n normz = pos1.x*pos2.y - pos1.y*pos2.x;\\n#endif\\n#endif // IS_TWOSIDED\\n \\n#ifdef NEEDS_VNORMAL\\n vNormal = vec4(normalize(vNormal.xyz), 1);\\n#endif\\n \\n#if defined(HAS_TEXTURE) || defined(IS_TEXT)\\n vTexcoord = aTexcoord;\\n#endif\\n \\n#if defined(FIXED_SIZE) && !defined(ROTATING)\\n vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w;\\n gl_Position = pos + vec4(aOfs*textScale, 0.);\\n#endif\\n \\n#if defined(IS_SPRITES) && !defined(FIXED_SIZE)\\n vec4 pos = mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w + vec4(aOfs, 0.);\\n gl_Position = prMatrix*pos;\\n#endif\\n \\n#ifdef FAT_LINES\\n /* This code was inspired by Matt Deslauriers' code in \\n https://mattdesl.svbtle.com/drawing-lines-is-hard */\\n vec2 aspectVec = vec2(uAspect, 1.0);\\n mat4 projViewModel = prMatrix * mvMatrix;\\n vec4 currentProjected = projViewModel * vec4(aPos, 1.0);\\n currentProjected = currentProjected/currentProjected.w;\\n vec4 nextProjected = projViewModel * vec4(aNext, 1.0);\\n vec2 currentScreen = currentProjected.xy * aspectVec;\\n vec2 nextScreen = (nextProjected.xy / nextProjected.w) * aspectVec;\\n float len = uLwd;\\n vec2 dir = vec2(1.0, 0.0);\\n vPoint = aPoint;\\n vLength = length(nextScreen - currentScreen)/2.0;\\n vLength = vLength/(vLength + len);\\n if (vLength > 0.0) {\\n dir = normalize(nextScreen - currentScreen);\\n }\\n vec2 normal = vec2(-dir.y, dir.x);\\n dir.x /= uAspect;\\n normal.x /= uAspect;\\n vec4 offset = vec4(len*(normal*aPoint.x*aPoint.y - dir), 0.0, 0.0);\\n gl_Position = currentProjected + offset;\\n#endif\\n \\n#ifdef IS_BRUSH\\n gl_Position = vec4(aPos, 1.);\\n#endif\\n}\",\"fragmentShader\":\"#line 2 2\\n// File 2 is the fragment shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\nvarying vec4 vCol; // carries alpha\\nvarying vec4 vPosition;\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nvarying vec2 vTexcoord;\\nuniform sampler2D uSampler;\\n#endif\\n\\n#ifdef HAS_FOG\\nuniform int uFogMode;\\nuniform vec3 uFogColor;\\nuniform vec4 uFogParms;\\n#endif\\n\\n#if defined(IS_LIT) && !defined(FIXED_QUADS)\\nvarying vec4 vNormal;\\n#endif\\n\\n#if NCLIPPLANES > 0\\nuniform vec4 vClipplane[NCLIPPLANES];\\n#endif\\n\\n#if NLIGHTS > 0\\nuniform mat4 mvMatrix;\\n#endif\\n\\n#ifdef IS_LIT\\nuniform vec3 emission;\\nuniform float shininess;\\n#if NLIGHTS > 0\\nuniform vec3 ambient[NLIGHTS];\\nuniform vec3 specular[NLIGHTS]; // light*material\\nuniform vec3 diffuse[NLIGHTS];\\nuniform vec3 lightDir[NLIGHTS];\\nuniform bool viewpoint[NLIGHTS];\\nuniform bool finite[NLIGHTS];\\n#endif\\n#endif // IS_LIT\\n\\n#ifdef IS_TWOSIDED\\nuniform bool front;\\nvarying float normz;\\n#endif\\n\\n#ifdef FAT_LINES\\nvarying vec2 vPoint;\\nvarying float vLength;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n vec4 fragColor;\\n#ifdef FAT_LINES\\n vec2 point = vPoint;\\n bool neg = point.y < 0.0;\\n point.y = neg ? (point.y + vLength)/(1.0 - vLength) :\\n -(point.y - vLength)/(1.0 - vLength);\\n#if defined(IS_TRANSPARENT) && defined(IS_LINESTRIP)\\n if (neg && length(point) <= 1.0) discard;\\n#endif\\n point.y = min(point.y, 0.0);\\n if (length(point) > 1.0) discard;\\n#endif // FAT_LINES\\n \\n#ifdef ROUND_POINTS\\n vec2 coord = gl_PointCoord - vec2(0.5);\\n if (length(coord) > 0.5) discard;\\n#endif\\n \\n#if NCLIPPLANES > 0\\n for (int i = 0; i < NCLIPPLANES; i++)\\n if (dot(vPosition, vClipplane[i]) < 0.0) discard;\\n#endif\\n \\n#ifdef FIXED_QUADS\\n vec3 n = vec3(0., 0., 1.);\\n#elif defined(IS_LIT)\\n vec3 n = normalize(vNormal.xyz);\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n if ((normz <= 0.) != front) discard;\\n#endif\\n\\n#ifdef IS_LIT\\n vec3 eye = normalize(-vPosition.xyz/vPosition.w);\\n vec3 lightdir;\\n vec4 colDiff;\\n vec3 halfVec;\\n vec4 lighteffect = vec4(emission, 0.);\\n vec3 col;\\n float nDotL;\\n#ifdef FIXED_QUADS\\n n = -faceforward(n, n, eye);\\n#endif\\n \\n#if NLIGHTS > 0\\n // Simulate two-sided lighting\\n if (n.z < 0.0)\\n n = -n;\\n for (int i=0;i 0) {\\n fogF = (uFogParms.y - vPosition.z/vPosition.w)/(uFogParms.y - uFogParms.x);\\n if (uFogMode > 1)\\n fogF = mix(uFogParms.w, 1.0, fogF);\\n fogF = fogF*uFogParms.z;\\n if (uFogMode == 2)\\n fogF = 1.0 - exp(-fogF);\\n // Docs are wrong: use (density*c)^2, not density*c^2\\n // https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/swrast/s_fog.c#L58\\n else if (uFogMode == 3)\\n fogF = 1.0 - exp(-fogF*fogF);\\n fogF = clamp(fogF, 0.0, 1.0);\\n gl_FragColor = vec4(mix(fragColor.rgb, uFogColor, fogF), fragColor.a);\\n } else gl_FragColor = fragColor;\\n#else\\n gl_FragColor = fragColor;\\n#endif // HAS_FOG\\n \\n}\",\"players\":[],\"webGLoptions\":{\"preserveDrawingBuffer\":true}},\"evals\":[],\"jsHooks\":[]} axes <- ellipse3d.axes(cov, centre=mu, level=0.68, color=\"gray\", lwd=2)"},{"path":"https://friendly.github.io/heplots/reference/Ellipsoid.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw an Ellipsoid in an rgl Scene — Ellipsoid","title":"Draw an Ellipsoid in an rgl Scene — Ellipsoid","text":"experimental function designed separate internal code link{heplot3d}.","code":""},{"path":"https://friendly.github.io/heplots/reference/Ellipsoid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw an Ellipsoid in an rgl Scene — Ellipsoid","text":"","code":"Ellipsoid(x, ...) # S3 method for data.frame Ellipsoid(x, which = 1:3, method = c(\"classical\", \"mve\", \"mcd\"), ...) # S3 method for default Ellipsoid( x, center = c(0, 0, 0), which = 1:3, radius = 1, df = Inf, label = \"\", cex.label = 1.5, col = \"pink\", lwd = 1, segments = 40, shade = TRUE, alpha = 0.1, wire = TRUE, verbose = FALSE, warn.rank = FALSE, ... )"},{"path":"https://friendly.github.io/heplots/reference/Ellipsoid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw an Ellipsoid in an rgl Scene — Ellipsoid","text":"x object. default method parameter x square positive definite matrix least 3x3 size. treated correlation covariance multivariate normal distribution. data.frame method, numeric data frame least 3 columns. ... arguments parameter selects variables object plotted. default first 3. method covariance method used: classical product-moment (\"classical\"), minimum volume ellipsoid (\"mve\"), minimum covariance determinant (\"mcd\" center center ellipsoid, vector length 3, typically mean vector data radius size ellipsoid df degrees freedom associated covariance matrix, used calculate appropriate F statistic label label ellipsoid cex.label text size label col color ellipsoid lwd line wire-frame version segments number segments composing ellipsoid; defaults 40. shade logical; ellipsoid smoothly shaded? alpha transparency shaded ellipsoid wire logical; ellipsoid drawn wire frame? verbose logical; debugging warn.rank logical; warn ellipsoid less rank 3?","code":""},{"path":"https://friendly.github.io/heplots/reference/Ellipsoid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw an Ellipsoid in an rgl Scene — Ellipsoid","text":"returns bounding box ellipsoid invisibly; otherwise used side effect drawing ellipsoid","code":""},{"path":"https://friendly.github.io/heplots/reference/Ellipsoid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw an Ellipsoid in an rgl Scene — Ellipsoid","text":"","code":"# none yet"},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":null,"dir":"Reference","previous_headings":"","what":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"Calculates partial eta-squared linear models multivariate analogs eta-squared (R^2), indicating partial association term multivariate linear model. different analog four standard multivariate test statistics: Pillai's trace, Hotelling-Lawley trace, Wilks' Lambda Roy's maximum root test.","code":""},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"","code":"etasq(x, ...) # S3 method for mlm etasq(x, ...) # S3 method for Anova.mlm etasq(x, anova = FALSE, ...) # S3 method for lm etasq(x, anova = FALSE, partial = TRUE, ...)"},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"x lm, mlm Anova.mlm object ... arguments passed Anova. anova logical, indicating whether result also contain test statistics produced Anova(). partial logical, indicating whether calculate partial classical eta^2.","code":""},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"anova=FALSE, one-column data frame containing eta-squared values term model. anova=TRUE, 5-column (lm) 7-column (mlm) data frame containing eta-squared values test statistics produced print.Anova() term model.","code":""},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"univariate linear models, classical \\(\\eta^2\\) = SSH / SST partial \\(\\eta^2\\) = SSH / (SSH + SSE). identical one-way designs. Partial eta-squared describes proportion total variation attributable given factor, partialing (excluding) factors total nonerror variation. commonly used measures effect size measures (non-linear) strength association ANOVA models. multivariate tests based \\(s=min(p, df_h)\\) latent roots \\(H E^{-1}\\). analogous multivariate partial \\(\\eta^2\\) measures calculated : Pillai's trace (V) \\(\\eta^2 = V/s\\) Hotelling-Lawley trace (T) \\(\\eta^2 = T/(T+s)\\) Wilks' Lambda (L) \\(\\eta^2 = L^{1/s}\\) Roy's maximum root (R) \\(\\eta^2 = R/(R+1)\\)","code":""},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"Muller, K. E. Peterson, B. L. (1984). Practical methods computing power testing Multivariate General Linear Hypothesis Computational Statistics Data Analysis, 2, 143-158. Muller, K. E. LaVange, L. M. Ramey, S. L. Ramey, C. T. (1992). Power Calculations General Linear Multivariate Models Including Repeated Measures Applications. Journal American Statistical Association, 87, 1209-1226.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/etasq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measures of Partial Association (Eta-squared) for Linear Models — etasq","text":"","code":"library(car) data(Soils, package=\"carData\") soils.mod <- lm(cbind(pH,N,Dens,P,Ca,Mg,K,Na,Conduc) ~ Block + Contour*Depth, data=Soils) #Anova(soils.mod) etasq(Anova(soils.mod)) #> eta^2 #> Block 0.5585973 #> Contour 0.6692989 #> Depth 0.5983772 #> Contour:Depth 0.2058495 etasq(soils.mod) # same #> eta^2 #> Block 0.5585973 #> Contour 0.6692989 #> Depth 0.5983772 #> Contour:Depth 0.2058495 etasq(Anova(soils.mod), anova=TRUE) #> #> Type II MANOVA Tests: Pillai test statistic #> eta^2 Df test stat approx F num Df den Df Pr(>F) #> Block 0.55860 3 1.6758 3.7965 27 81 1.777e-06 *** #> Contour 0.66930 2 1.3386 5.8468 18 52 2.730e-07 *** #> Depth 0.59838 3 1.7951 4.4697 27 81 8.777e-08 *** #> Contour:Depth 0.20585 6 1.2351 0.8640 54 180 0.7311 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 etasq(soils.mod, test=\"Wilks\") #> eta^2 #> Block 0.5701385 #> Contour 0.7434504 #> Depth 0.8294239 #> Contour:Depth 0.2250388 etasq(soils.mod, test=\"Hotelling\") #> eta^2 #> Block 0.5823516 #> Contour 0.8009753 #> Depth 0.9421533 #> Contour:Depth 0.2456774"},{"path":"https://friendly.github.io/heplots/reference/FootHead.html","id":null,"dir":"Reference","previous_headings":"","what":"Head measurements of football players — FootHead","title":"Head measurements of football players — FootHead","text":"Data collected part preliminary study examining relation football helmet design neck injuries. 30 subjects three groups: High school football players, college players non-football players.","code":""},{"path":"https://friendly.github.io/heplots/reference/FootHead.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Head measurements of football players — FootHead","text":"data frame 90 observations following 7 variables. group factor levels High school College Non-football width numeric vector: head width widest dimension circum numeric vector: head circumference front.back numeric vector: front back distance eye level eye.top numeric vector: eye top head ear.top numeric vector:ear top head jaw numeric vector: jaw width","code":""},{"path":"https://friendly.github.io/heplots/reference/FootHead.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Head measurements of football players — FootHead","text":"Rencher, . C. (1995), Methods Multivariate Analysis, New York: Wiley, Table 8.3.","code":""},{"path":"https://friendly.github.io/heplots/reference/FootHead.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Head measurements of football players — FootHead","text":"","code":"data(FootHead) str(FootHead) #> 'data.frame':\t90 obs. of 7 variables: #> $ group : Factor w/ 3 levels \"High school\",..: 1 1 1 1 1 1 1 1 1 1 ... #> $ width : num 13.5 15.5 14.5 15.5 14.5 14 15 15 15.5 15.5 ... #> $ circum : num 57.1 58.4 55.9 58.4 58.4 ... #> $ front.back: num 19.5 21 19 20 20 21 19.5 21 20.5 20.5 ... #> $ eye.top : num 12.5 12 10 13.5 13 12 13.5 13 13.5 13 ... #> $ ear.top : num 14 16 13 15 15.5 14 15.5 14 14.5 15 ... #> $ jaw : num 11 12 12 12 12 13 13 13 12.5 13 ... require(car) # use Helmert contrasts for group contrasts(FootHead$group) <- contr.helmert contrasts(FootHead$group) #> [,1] [,2] #> High school -1 -1 #> College 1 -1 #> Non-football 0 2 foot.mod <- lm(cbind(width, circum,front.back,eye.top,ear.top,jaw) ~ group, data=FootHead) Manova(foot.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> group 2 0.76116 8.4994 12 166 1.876e-12 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # show the HE plot for the first two variables heplot(foot.mod, main=\"HE plot for width and circumference\", fill=TRUE, col=c(\"red\", \"blue\")) # show it with tests of Helmert contrasts heplot(foot.mod, hypotheses=list(\"group.1\"=\"group1\",\"group.2\"=\"group2\"), col=c(\"red\", \"blue\", \"green3\", \"green3\" ), main=\"HE plot with orthogonal Helmert contrasts\") # show all pairwise HE plots pairs(foot.mod) # ... with tests of Helmert contrasts pairs(foot.mod, hypotheses=list(\"group.1\"=\"group1\",\"group.2\"=\"group2\"), col=c(\"red\", \"blue\", \"green3\", \"green3\"), hyp.labels=FALSE) # see that the hypothesis for groups really is 2D if(requireNamespace(\"rgl\")){ heplot3d(foot.mod, variables=c(1,2,6), hypotheses=list(\"group.1\"=\"group1\",\"group.2\"=\"group2\"), col=c(\"red\", \"blue\", \"green3\", \"green3\" ), wire=FALSE) }"},{"path":"https://friendly.github.io/heplots/reference/glance.mlm.html","id":null,"dir":"Reference","previous_headings":"","what":"Glance at an mlm object — glance.mlm","title":"Glance at an mlm object — glance.mlm","text":"function takes \"mlm\" object, fit lm multivariate response. goal return something analogous glance.lm univariate response linear model.","code":""},{"path":"https://friendly.github.io/heplots/reference/glance.mlm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Glance at an mlm object — glance.mlm","text":"","code":"# S3 method for mlm glance(x, ...)"},{"path":"https://friendly.github.io/heplots/reference/glance.mlm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Glance at an mlm object — glance.mlm","text":"x mlm object created lm, .e., multivariate response. ... Additional arguments. used.","code":""},{"path":"https://friendly.github.io/heplots/reference/glance.mlm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Glance at an mlm object — glance.mlm","text":"tibble one row response variable columns: r.squared R squared statistic, percent variation explained model. adj.r.squared Adjusted R squared statistic, like R squared statistic except taking degrees freedom account. sigma Estimated standard error residuals fstatitic Overall F statistic model numdf Numerator degrees freedom overall test dendf Denominator degrees freedom overall test p.value P-value corresponding F statistic nobs Number observations used","code":""},{"path":"https://friendly.github.io/heplots/reference/glance.mlm.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Glance at an mlm object — glance.mlm","text":"multivariate case, returns tibble one row response variable, containing goodness fit measures, F-tests p-values.","code":""},{"path":"https://friendly.github.io/heplots/reference/glance.mlm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Glance at an mlm object — glance.mlm","text":"","code":"iris.mod <- lm(cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) ~ Species, data=iris) glance(iris.mod) #> # A tibble: 4 × 9 #> response r.squared adj.r.squared sigma fstatistic numdf dendf p.value nobs #> #> 1 Sepal.Len… 0.619 0.614 0.515 119. 2 147 1.67e-31 150 #> 2 Sepal.Wid… 0.401 0.393 0.340 49.2 2 147 4.49e-17 150 #> 3 Petal.Len… 0.941 0.941 0.430 1180. 2 147 2.86e-91 150 #> 4 Petal.Wid… 0.929 0.928 0.205 960. 2 147 4.17e-85 150"},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":null,"dir":"Reference","previous_headings":"","what":"Orthogonalize successive columns of a data frame or matrix — gsorth","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"gsorth uses sequential, orthogonal projections, Gram-Schmidt method, transform matrix numeric columns data frame uncorrelated set, possibly retaining column means standard deviations original.","code":""},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"","code":"gsorth(y, order, recenter = TRUE, rescale = TRUE, adjnames = TRUE)"},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"y numeric data frame matrix order integer vector specifying order /subset columns y orthogonalized. missing, order=1:p p=ncol(y). recenter TRUE, result column means original; else means = 0 cols 2:p. rescale TRUE, result column standard deviations original; else sd = residual variance cols 2:p adjnames TRUE, column names result adjusted form Y1, Y2.1, Y3.12, adding suffixes '.1', '.12', etc. original column names.","code":""},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"Returns matrix data frame uncorrelated columns. Row column names copied result.","code":""},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"statistical applications, interpretation depends order variables orthogonalized. multivariate linear models, orthogonalizing response, Y variables provides equivalent step-tests, Y1 tested alone, Y2.1, Y3.12, etc. can tested determine additional contributions previous response variables. Similarly, orthogonalizing model X variables provides equivalent Type tests, provided anova. method equivalent setting columns 2:p residuals linear regression column prior columns, .e., z[,j] <- resid( lm( z[,j] ~ .matrix(z[,1:(j-1)]), data=z) ) However, accuracy speed transformation carried using QR decomposition.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/gsorth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Orthogonalize successive columns of a data frame or matrix — gsorth","text":"","code":"GSiris <- gsorth(iris[,1:4]) GSiris <- gsorth(iris, order=1:4) # same, using order str(GSiris) #> num [1:150, 1:4] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... #> - attr(*, \"dimnames\")=List of 2 #> ..$ : chr [1:150] \"1\" \"2\" \"3\" \"4\" ... #> ..$ : chr [1:4] \"Sepal.Length\" \"Sepal.Width.1\" \"Petal.Length.12\" \"Petal.Width.123\" zapsmall(cor(GSiris)) #> Sepal.Length Sepal.Width.1 Petal.Length.12 Petal.Width.123 #> Sepal.Length 1 0 0 0 #> Sepal.Width.1 0 1 0 0 #> Petal.Length.12 0 0 1 0 #> Petal.Width.123 0 0 0 1 colMeans(GSiris) #> Sepal.Length Sepal.Width.1 Petal.Length.12 Petal.Width.123 #> 5.843333 3.057333 3.758000 1.199333 # sd(GSiris) -- sd() now deprecated apply(GSiris, 2, sd) #> Sepal.Length Sepal.Width.1 Petal.Length.12 Petal.Width.123 #> 0.8280661 0.4358663 1.7652982 0.7622377 # orthogonalize Y side GSiris <- data.frame(gsorth(iris[,1:4]), Species=iris$Species) iris.mod1 <- lm(as.matrix(GSiris[,1:4]) ~ Species, data=GSiris) car::Anova(iris.mod1) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Species 2 1.1919 53.466 8 290 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # orthogonalize X side rohwer.mod <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, data=Rohwer) car::Anova(rohwer.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> n 1 0.059964 1.2970 3 61 0.283582 #> s 1 0.097788 2.2039 3 61 0.096703 . #> ns 1 0.208820 5.3667 3 61 0.002406 ** #> na 1 0.183478 4.5690 3 61 0.005952 ** #> ss 1 0.091796 2.0552 3 61 0.115521 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # type I tests for Rohwer data Rohwer.orth <- cbind(Rohwer[,1:5], gsorth(Rohwer[, c(\"n\", \"s\", \"ns\", \"na\", \"ss\")], adjnames=FALSE)) rohwer.mod1 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, data=Rohwer.orth) car::Anova(rohwer.mod1) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> n 1 0.227735 5.9962 3 61 0.001195 ** #> s 1 0.088967 1.9857 3 61 0.125530 #> ns 1 0.112979 2.5898 3 61 0.060939 . #> na 1 0.302957 8.8375 3 61 5.958e-05 *** #> ss 1 0.091796 2.0552 3 61 0.115521 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # compare with anova() anova(rohwer.mod1) #> Analysis of Variance Table #> #> Df Pillai approx F num Df den Df Pr(>F) #> (Intercept) 1 0.97665 850.63 3 61 < 2.2e-16 *** #> n 1 0.22774 6.00 3 61 0.001195 ** #> s 1 0.08897 1.99 3 61 0.125530 #> ns 1 0.11298 2.59 3 61 0.060939 . #> na 1 0.30296 8.84 3 61 5.958e-05 *** #> ss 1 0.09180 2.06 3 61 0.115521 #> Residuals 63 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # compare heplots for original Xs and orthogonalized, Type I heplot(rohwer.mod) heplot(rohwer.mod1)"},{"path":"https://friendly.github.io/heplots/reference/Headache.html","id":null,"dir":"Reference","previous_headings":"","what":"Treatment of Headache Sufferers for Sensitivity to Noise — Headache","title":"Treatment of Headache Sufferers for Sensitivity to Noise — Headache","text":"study conducted investigating effectiveness different kinds psychological treatment sensitivity headache sufferers noise, described Hand Taylor (1987), Study E.","code":""},{"path":"https://friendly.github.io/heplots/reference/Headache.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Treatment of Headache Sufferers for Sensitivity to Noise — Headache","text":"data frame 98 observations following 6 variables. type Type headache, factor levels Migrane Tension treatment Treatment group, factor levels T1 T2 T3 Control. See Details u1 Noise level rated Uncomfortable, initial measure du1 Noise level rated Definitely Uncomfortable, initial measure u2 Noise level rated Uncomfortable, final measure du2 Noise level rated Definitely Uncomfortable, final measure","code":""},{"path":"https://friendly.github.io/heplots/reference/Headache.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Treatment of Headache Sufferers for Sensitivity to Noise — Headache","text":"D. J. Hand C. C. Taylor (1987). Multivariate analysis variance repeated measures: practical approach behavioural scientists London: Chapman Hall. ISBN: 0412258005. Table E.1.","code":""},{"path":"https://friendly.github.io/heplots/reference/Headache.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Treatment of Headache Sufferers for Sensitivity to Noise — Headache","text":"pre-post design, 98 patients first assessed volume noise found uncomfortable (U) definitely uncomfortable (DU). given relaxation training, listened noise DU level given instruction breathing techniques use visual imagery distract discomfort. One four treatments applied, patients reassessed noise volume considered uncomfortable (U) definitely uncomfortable (DU). treatments described follows: T1 Listened tone initial DU level, amount time able tolerate . T2 T1, one additional minute exposure T3 T2, explicitly instructed use relaxation techniques Control subject experienced exposure noise tone final sensitivity measures taken Hand Taylor described several substantive hypotheses related differences among treatments. Headache data frame, included contrasts(Headache$treatment)","code":""},{"path":"https://friendly.github.io/heplots/reference/Headache.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Treatment of Headache Sufferers for Sensitivity to Noise — Headache","text":"","code":"library(car) data(Headache) str(Headache) #> 'data.frame':\t98 obs. of 6 variables: #> $ type : Factor w/ 2 levels \"Migrane\",\"Tension\": 1 1 2 1 1 1 1 1 1 2 ... #> $ treatment: Factor w/ 4 levels \"T1\",\"T2\",\"T3\",..: 3 1 1 3 3 3 2 1 1 3 ... #> ..- attr(*, \"contrasts\")= num [1:4, 1:3] 1 -1 0 0 1 1 0 -2 0 0 ... #> .. ..- attr(*, \"dimnames\")=List of 2 #> .. .. ..$ : chr [1:4] \"T1\" \"T2\" \"T3\" \"Control\" #> .. .. ..$ : NULL #> $ u1 : num 2.34 2.73 0.37 7.5 4.63 3.6 2.45 2.31 1.38 0.85 ... #> $ du1 : num 5.3 6.85 0.53 9.12 7.21 7.3 3.75 3.25 2.33 1.42 ... #> $ u2 : num 5.8 4.68 0.55 5.7 5.63 4.83 2.5 2 2.23 1.37 ... #> $ du2 : num 8.52 6.68 0.84 7.88 6.75 7.32 3.18 3.3 3.98 1.89 ... # basic MLM, specifying between-S effects headache.mod <- lm(cbind(u1, du1, u2, du2) ~ type * treatment, data=Headache) ############################## ## between-S tests ############################## Anova(headache.mod, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> type 1 0.042678 0.9283 4 87 0.451426 #> treatment 3 0.136154 3.0294 4 89 0.021609 * #> type:treatment 3 0.161202 3.5867 4 89 0.009281 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test each contrast separately print(linearHypothesis(headache.mod, hypothesis=\"treatment1\", test=\"Roy\"), SSP=FALSE) #> #> Multivariate Test: #> Df test stat approx F num Df den Df Pr(>F) #> Roy 1 0.01305284 0.2838993 4 87 0.88769 print(linearHypothesis(headache.mod, hypothesis=\"treatment2\", test=\"Roy\"), SSP=FALSE) #> #> Multivariate Test: #> Df test stat approx F num Df den Df Pr(>F) #> Roy 1 0.08267735 1.798232 4 87 0.13645 print(linearHypothesis(headache.mod, hypothesis=\"treatment3\", test=\"Roy\"), SSP=FALSE) #> #> Multivariate Test: #> Df test stat approx F num Df den Df Pr(>F) #> Roy 1 0.1902026 4.136907 4 87 0.0040827 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(headache.mod, variables=c(1,3), hypotheses=paste(\"treatment\", 1:3, sep=\"\"), hyp.labels=c(\"extra.exp\", \"no.inst\", \"explicit.inst\"), xlab=\"u1: Initial sensitivity\", ylab=\"u2: Final sensitivity\", main=\"Headache data: Unpleasant levels\") abline(0, 1, lty=5, col=\"gray\") heplot(headache.mod, variables=c(2,4), hypotheses=paste(\"treatment\", 1:3, sep=\"\"), xlab=\"du1: Initial sensitivity\", ylab=\"du2: Final sensitivity\", main=\"Headache data: Definitely Unpleasant levels\") abline(0, 1, lty=5, col=\"gray\") pairs(headache.mod) ############################## # between-S and within-S tests ############################## idata = expand.grid(level=factor(c(\"U\", \"DU\")), phase=factor(1:2)) Anova(headache.mod, idata=idata, idesign=~level*phase) #> #> Type II Repeated Measures MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 0.64648 164.580 1 90 < 2e-16 *** #> type 1 0.00691 0.627 1 90 0.43072 #> treatment 3 0.04122 1.290 3 90 0.28275 #> type:treatment 3 0.00118 0.035 3 90 0.99106 #> level 1 0.60226 136.276 1 90 < 2e-16 *** #> type:level 1 0.00000 0.000 1 90 0.99653 #> treatment:level 3 0.00660 0.199 3 90 0.89661 #> type:treatment:level 3 0.05360 1.699 3 90 0.17287 #> phase 1 0.02459 2.269 1 90 0.13546 #> type:phase 1 0.02267 2.088 1 90 0.15193 #> treatment:phase 3 0.08074 2.635 3 90 0.05459 . #> type:treatment:phase 3 0.06236 1.995 3 90 0.12033 #> level:phase 1 0.03465 3.231 1 90 0.07563 . #> type:level:phase 1 0.00820 0.744 1 90 0.39070 #> treatment:level:phase 3 0.02164 0.663 3 90 0.57669 #> type:treatment:level:phase 3 0.03475 1.080 3 90 0.36173 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"},{"path":"https://friendly.github.io/heplots/reference/heplot-package.html","id":null,"dir":"Reference","previous_headings":"","what":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"heplots package provides functions visualizing hypothesis tests multivariate linear models (MANOVA, multivariate multiple regression, MANCOVA, repeated measures designs). plots represent sums--squares--products matrices linear hypotheses error using ellipses (two dimensions), ellipsoids (three dimensions), line segments one dimension. See Fox, Friendly Monette (2007) brief introduction Friendly, Monette Fox (2013) general discussion role elliptical geometry statistical understanding. topics now addressed include robust MLMs, tests equality covariance matrices MLMs, chi square Q-Q plots MLMs. package also provides collection data sets illustrating variety multivariate linear models types listed , together graphical displays. Several tutorial vignettes also included. See vignette(package=\"heplots\").","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"graphical functions contained display multivariate model effects variable (data) space, one response variables (contrasts among response variables repeated measures designs). heplot constructs two-dimensional plots model terms linear hypotheses pairs response variables multivariate linear models. heplot3d constructs analogous 3D plots triples response variables. pairs.mlm constructs ``matrix'' pairwise plots. heplot1d constructs 1-dimensional analogs plots model terms linear hypotheses single response variables. repeated measure designs, -subject effects within-subject effects must plotted separately, error terms (E matrices) differ. terms involving within-subject effects, functions carry linear transformation matrix Y responses matrix Y M, M model matrix term intra-subject design produce plots H E matrices transformed space. vignette repeated describes graphical methods repeated measures designs. related car package calculates Type II Type III tests multivariate linear hypotheses using Anova linearHypothesis functions. candisc-package package provides functions visualizing effects MLM model terms low-dimensional canonical space shows largest hypothesis relative error variation. candisc package now also includes related methods canonical correlation analysis. heplots package also contains large number multivariate data sets examples analyses graphic displays. Use data(package=\"heplots\") see current list.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"John Fox, Michael Friendly, Georges Monette Maintainer: Michael Friendly, friendly@yorku.ca, http://datavis.ca","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot-package.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples. Journal Statistical Software, 17(6), 1-42. doi:10.18637/jss.v017.i06 Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421-444. http://datavis.ca/papers/jcgs-heplots.pdf Fox, J., Friendly, M. & Monette, G. (2007). Visual hypothesis tests multivariate linear models: heplots package R. DSC 2007: Directions Statistical Computing. https://socialsciences.mcmaster.ca/jfox/heplots-dsc-paper.pdf Friendly, M. (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 Fox, J., Friendly, M. & Weisberg, S. (2013). \tHypothesis Tests Multivariate Linear Models Using car Package. \tR Journal, 5(1), \thttps://journal.r-project.org/archive/2013-1/fox-friendly-weisberg.pdf. Friendly, M., Monette, G. & Fox, J. (2013). \tElliptical Insights: Understanding Statistical Methods Elliptical Geometry. \tStatistical Science, 2013, 28 (1), 1-39, \thttp://datavis.ca/papers/ellipses.pdf. Friendly, M. & Sigal, M. (2014). Recent Advances Visualizing Multivariate Linear Models. Revista Colombiana de Estadistica, 37, 261-283 Friendly, M. & Sigal, M. (2016). Graphical Methods Multivariate Linear Models Psychological Research: R Tutorial. Submitted publication.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Two-Dimensional HE Plots — heplot","title":"Two-Dimensional HE Plots — heplot","text":"function plots ellipses representing hypothesis error sums--squares--products matrices terms linear hypotheses multivariate linear model. include MANOVA models (explanatory variables factors), multivariate regression (quantitative predictors), MANCOVA models, homogeneity regression, well repeated measures designs treated multivariate perspective.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Two-Dimensional HE Plots — heplot","text":"","code":"heplot(mod, ...) # S3 method for mlm heplot( mod, terms, hypotheses, term.labels = TRUE, hyp.labels = TRUE, err.label = \"Error\", label.pos = NULL, variables = 1:2, error.ellipse = !add, factor.means = !add, grand.mean = !add, remove.intercept = TRUE, type = c(\"II\", \"III\", \"2\", \"3\"), idata = NULL, idesign = NULL, icontrasts = c(\"contr.sum\", \"contr.poly\"), imatrix = NULL, iterm = NULL, markH0 = !is.null(iterm), manova, size = c(\"evidence\", \"effect.size\"), level = 0.68, alpha = 0.05, segments = 60, center.pch = \"+\", center.cex = 2, col = getOption(\"heplot.colors\", c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\")), lty = 2:1, lwd = 1:2, fill = FALSE, fill.alpha = 0.3, xlab, ylab, main = \"\", xlim, ylim, axes = TRUE, offset.axes, add = FALSE, verbose = FALSE, warn.rank = FALSE, ... )"},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Two-Dimensional HE Plots — heplot","text":"mod model object class \"mlm\". ... arguments pass plot, text, points. terms logical value character vector terms model plot hypothesis matrices; missing TRUE, defaults terms; FALSE, terms plotted. hypotheses optional list linear hypotheses plot hypothesis matrices; hypotheses specified linearHypothesis function car package; list elements can named, case names used. term.labels logical value character vector names terms plotted. TRUE (default) names terms used; FALSE, term labels plotted. hyp.labels logical value character vector names hypotheses plotted. TRUE (default) names components list hypotheses used; FALSE, hypothesis labels plotted. err.label Label error ellipse label.pos Label position, vector integers (0:4) character strings (c(\"center\", \"bottom\", \"left\", \"top\", \"right\"), c(\"C\", \"S\", \"W\", \"N\", \"E\") use labeling ellipses, recycled necessary. Values 1, 2, 3 4, respectively indicate positions , left , right max/min coordinates ellipse; value 0 specifies centroid ellipse object. default, label.pos=NULL uses correlation ellipse determine \"top\" (r>=0) \"bottom\" (r<0). Even flexible options described label.ellipse variables indices names two response variables plotted; defaults 1:2. error.ellipse TRUE, plot error ellipse; defaults TRUE, argument add FALSE (see ). factor.means logical value character vector names factors means plotted, TRUE FALSE; defaults TRUE, argument add FALSE (see ). grand.mean TRUE, plot centroid data; defaults TRUE, argument add FALSE (see ). remove.intercept TRUE (default), plot ellipse intercept even MANOVA table. type ``type'' sum--squares--products matrices compute; one \"II\", \"III\", \"2\", \"3\", \"II\" default (\"2\" synonym). idata optional data frame giving factor factors defining intra-subject model multivariate repeated-measures data. See Friendly (2010) Details Anova explanation intra-subject design explanation arguments relating intra-subject factors. idesign one-sided model formula using ``data'' idata specifying intra-subject design repeated measure models. icontrasts names contrast-generating functions applied default factors ordered factors, respectively, within-subject ``data''; contrasts must produce intra-subject model matrix different terms orthogonal. default c(\"contr.sum\", \"contr.poly\"). imatrix lieu idata idesign, can specify intra-subject design matrix directly via imatrix, form list named elements. element gives columns within-subject model matrix intra-subject term tested, must many rows responses; columns within-subject model matrix different terms must mutually orthogonal. iterm repeated measures designs, must specify one intra-subject term (character string) select SSPE (E) matrix used plot. Hypothesis terms plotted include iterm effect well interactions iterm terms. markH0 logical value (else list arguments mark.H0) used draw cross-hairs point indicating value point null hypothesis. default TRUE iterm non-NULL. manova optional Anova.mlm object model; absent MANOVA computed. Specifying argument can therefore save computation repeated calls. size scale hypothesis ellipse relative error ellipse; \"evidence\", default, scaling done ``significant'' hypothesis ellipse level alpha extends outside error ellipse; \"effect.size\", hypothesis ellipse scale error ellipse. level equivalent coverage ellipse normally-distributed errors, defaults 0.68, giving standard 1 SD bivariate ellipse. alpha significance level Roy's greatest-root test statistic; size=\"evidence\", hypothesis ellipse scaled just touches error ellipse specified alpha level; larger hypothesis ellipse somewhere space response variables therefore indicates statistical significance; defaults 0.05. segments number line segments composing ellipse; defaults 60. center.pch character use plotting centroid data; defaults \"+\". center.cex size character use plotting centroid data; defaults 2. col color vector colors use plotting ellipses; first color used error ellipse; remaining colors --- recycled necessary --- used hypothesis ellipses. single color can given, case used ellipses. convenience, default colors heplots produced given session can changed assigning color vector via options(heplot.colors =c(...). Otherwise, default colors c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\"). lty vector line types use plotting ellipses; first used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single line type can given. Defaults 2:1. lwd vector line widths use plotting ellipses; first used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single line width can given. Defaults 1:2. fill logical vector indicating whether ellipse filled . first value used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single fill value can given. Defaults FALSE backward compatibility. See Details . fill.alpha Alpha transparency filled ellipses, numeric scalar vector values within [0,1], 0 means fully transparent 1 means fully opaque. xlab x-axis label; defaults name x variable. ylab y-axis label; defaults name y variable. main main plot label; defaults \"\". xlim x-axis limits; absent, computed data. ylim y-axis limits; absent, computed data. axes Whether draw x, y axes; defaults TRUE offset.axes proportion extend axes direction computed data; optional. add TRUE, add current plot; default FALSE. TRUE, error ellipse plotted. verbose TRUE, print MANOVA table details hypothesis tests; default FALSE. warn.rank TRUE, suppress warnings rank hypothesis matrix ellipse collapses line; default FALSE.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Two-Dimensional HE Plots — heplot","text":"function invisibly returns object class \"heplot\", coordinates various hypothesis ellipses error ellipse, limits horizontal vertical axes. may useful adding additional annotations plot, using standard plotting functions. (methods manipulating objects currently available.) components : H list containing coordinates ellipse hypothesis terms E matrix containing coordinates error ellipse center x,y coordinates centroid xlim x-axis limits ylim y-axis limits radius radius unit circles used generate ellipses","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Two-Dimensional HE Plots — heplot","text":"heplot function plots representation covariance ellipses hypothesized model terms linear hypotheses (H) corresponding error (E) matrices two response variables multivariate linear model (mlm). plot helps visualize nature dimensionality response variation two variables jointly relation error variation summarized various multivariate test statistics (Wilks' Lambda, Pillai trace, Hotelling-Lawley trace, Roy maximum root). Roy's maximum root test particularly simple visual interpretation, exploited size=\"evidence\" version plot. See description argument alpha. 1 df hypothesis term (quantitative regressor, single contrast parameter test), H matrix rank 1 (one non-zero latent root \\(H E^{-1}\\)) H \"ellipse\" collapses degenerate line. Typically, fit mlm mymlm <- lm(cbind(y1, y2, y3, ...) ~ modelterms), plot modelterms heplot(mymlm, ...). Arbitrary linear hypotheses related terms model (e.g., contrasts effect) can included plot using hypotheses argument. See linearHypothesis details. repeated measure designs, response variables correspond one variates observed within-subject design, -subject effects within-subject effects must plotted separately, error terms (E matrices) differ. specify intra-subject term (iterm), analysis plots amount analysis matrix Y responses post-multiplied matrix M determined intra-subject design term. See Friendly (2010) vignette(\"repeated\") package extended discussion examples. related candisc package provides functions visualizing multivariate linear model low-dimensional view via generalized canonical discriminant analyses. heplot.candisc heplot3d.candisc provide low-rank 2D (3D) view effects given term space maximum discrimination. element fill TRUE, ellipse outline drawn using corresponding color col, interior filled transparent version color specified fill.alpha. produce filled (non-degenerate) ellipses without bounding outline, use value lty=0 corresponding position.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Two-Dimensional HE Plots — heplot","text":"Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples Journal Statistical Software, 17(6), 1--42. https://www.jstatsoft.org/v17/i06/, DOI: 10.18637/jss.v017.i06 Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421--444. http://datavis.ca/papers/jcgs-heplots.pdf Friendly, Michael (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. DOI: 10.18637/jss.v037.i04. Fox, J., Friendly, M. & Weisberg, S. (2013). Hypothesis Tests Multivariate Linear Models Using car Package. R Journal, 5(1), https://journal.r-project.org/archive/2013-1/fox-friendly-weisberg.pdf. Friendly, M. & Sigal, M. (2014) Recent Advances Visualizing Multivariate Linear Models. Revista Colombiana de Estadistica, 37, 261-283.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/heplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Two-Dimensional HE Plots — heplot","text":"","code":"## iris data contrasts(iris$Species) <- matrix(c(0,-1,1, 2, -1, -1), 3,2) contrasts(iris$Species) #> [,1] [,2] #> setosa 0 2 #> versicolor -1 -1 #> virginica 1 -1 iris.mod <- lm(cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) ~ Species, data=iris) hyp <- list(\"V:V\"=\"Species1\",\"S:VV\"=\"Species2\") heplot(iris.mod, hypotheses=hyp) # compare with effect-size scaling heplot(iris.mod, hypotheses=hyp, size=\"effect\", add=TRUE) # try filled ellipses; include contrasts heplot(iris.mod, hypotheses=hyp, fill=TRUE, fill.alpha=0.2, col=c(\"red\", \"blue\")) heplot(iris.mod, hypotheses=hyp, fill=TRUE, col=c(\"red\", \"blue\"), lty=c(0,0,1,1)) # vary label position and fill.alpha heplot(iris.mod, hypotheses=hyp, fill=TRUE, fill.alpha=c(0.3,0.1), col=c(\"red\", \"blue\"), lty=c(0,0,1,1), label.pos=0:3) # what is returned? hep <-heplot(iris.mod, variables=c(1,3), hypotheses=hyp) str(hep) #> List of 6 #> $ H :List of 3 #> ..$ Species: num [1:61, 1:2] 9.66 9.68 9.66 9.6 9.5 ... #> .. ..- attr(*, \"dimnames\")=List of 2 #> .. .. ..$ : NULL #> .. .. ..$ : chr [1:2] \"Sepal.Length\" \"Petal.Length\" #> ..$ V:V : num [1:61, 1:2] 7.41 7.4 7.38 7.33 7.27 ... #> .. ..- attr(*, \"dimnames\")=List of 2 #> .. .. ..$ : NULL #> .. .. ..$ : chr [1:2] \"Sepal.Length\" \"Petal.Length\" #> ..$ S:VV : num [1:61, 1:2] 9.33 9.31 9.25 9.16 9.03 ... #> .. ..- attr(*, \"dimnames\")=List of 2 #> .. .. ..$ : NULL #> .. .. ..$ : chr [1:2] \"Sepal.Length\" \"Petal.Length\" #> $ E : num [1:61, 1:2] 6.62 6.62 6.61 6.59 6.56 ... #> ..- attr(*, \"dimnames\")=List of 2 #> .. ..$ : NULL #> .. ..$ : chr [1:2] \"Sepal.Length\" \"Petal.Length\" #> $ center: Named num [1:2] 5.84 3.76 #> ..- attr(*, \"names\")= chr [1:2] \"Sepal.Length\" \"Petal.Length\" #> $ xlim : Named num [1:2] 2.01 9.68 #> ..- attr(*, \"names\")= chr [1:2] \"Sepal.Length\" \"Sepal.Length\" #> $ ylim : Named num [1:2] -6.33 13.84 #> ..- attr(*, \"names\")= chr [1:2] \"Petal.Length\" \"Petal.Length\" #> $ radius: num 1.52 #> - attr(*, \"class\")= chr \"heplot\" # all pairs pairs(iris.mod, hypotheses=hyp, hyp.labels=FALSE) ## Pottery data, from car package data(Pottery, package = \"carData\") pottery.mod <- lm(cbind(Al, Fe, Mg, Ca, Na) ~ Site, data=Pottery) heplot(pottery.mod) heplot(pottery.mod, terms=FALSE, add=TRUE, col=\"blue\", hypotheses=list(c(\"SiteCaldicot = 0\", \"SiteIsleThorns=0\")), hyp.labels=\"Sites Caldicot and Isle Thorns\") ## Rohwer data, multivariate multiple regression/ANCOVA #-- ANCOVA, assuming equal slopes rohwer.mod <- lm(cbind(SAT, PPVT, Raven) ~ SES + n + s + ns + na + ss, data=Rohwer) car::Anova(rohwer.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> SES 1 0.37853 12.1818 3 60 2.507e-06 *** #> n 1 0.04030 0.8400 3 60 0.477330 #> s 1 0.09271 2.0437 3 60 0.117307 #> ns 1 0.19283 4.7779 3 60 0.004729 ** #> na 1 0.23134 6.0194 3 60 0.001181 ** #> ss 1 0.04990 1.0504 3 60 0.376988 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 col <- c(\"red\", \"black\", \"blue\", \"cyan\", \"magenta\", \"brown\", \"gray\") heplot(rohwer.mod, col=col) # Add ellipse to test all 5 regressors heplot(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\")), col=col, fill=TRUE) # View all pairs pairs(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\"))) # or 3D plot if(requireNamespace(\"rgl\")){ col <- c(\"pink\", \"black\", \"blue\", \"cyan\", \"magenta\", \"brown\", \"gray\") heplot3d(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\")), col=col) }"},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":null,"dir":"Reference","previous_headings":"","what":"One-Dimensional HE Plots — heplot1d","title":"One-Dimensional HE Plots — heplot1d","text":"function plots 1-dimensional representation hypothesis (H) error (E) sums--squares--products matrices terms linear hypotheses multivariate linear model.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"One-Dimensional HE Plots — heplot1d","text":"","code":"heplot1d(mod, ...) # S3 method for mlm heplot1d( mod, terms, hypotheses, term.labels = TRUE, hyp.labels = TRUE, variables = 1, error.ellipse = !add, factor.means = !add, grand.mean = !add, remove.intercept = TRUE, type = c(\"II\", \"III\", \"2\", \"3\"), idata = NULL, idesign = NULL, icontrasts = c(\"contr.sum\", \"contr.poly\"), imatrix = NULL, iterm = NULL, manova, size = c(\"evidence\", \"effect.size\"), level = 0.68, alpha = 0.05, center.pch = \"|\", col = getOption(\"heplot.colors\", c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\")), lty = 2:1, lwd = 1:2, xlab, main = \"\", xlim, axes = TRUE, offset.axes = 0.1, add = FALSE, verbose = FALSE, ... )"},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"One-Dimensional HE Plots — heplot1d","text":"mod model object class \"mlm\". ... arguments pass plot, text, points. terms logical value character vector terms model plot hypothesis matrices; missing TRUE, defaults terms; FALSE, terms plotted. hypotheses optional list linear hypotheses plot hypothesis matrices; hypotheses specified linearHypothesis function car package; list elements can named, case names used. term.labels logical value character vector names terms plotted. TRUE (default) names terms used; FALSE, term labels plotted. hyp.labels logical value character vector names hypotheses plotted. TRUE (default) names components list hypotheses used; FALSE, hypothesis labels plotted. variables indices names two response variables plotted; defaults 1:2. error.ellipse TRUE, plot error ellipse; defaults TRUE, argument add FALSE (see ). factor.means logical value character vector names factors means plotted, TRUE FALSE; defaults TRUE, argument add FALSE (see ). grand.mean TRUE, plot centroid data; defaults TRUE, argument add FALSE (see ). remove.intercept TRUE (default), plot ellipse intercept even MANOVA table. type ``type'' sum--squares--products matrices compute; one \"II\", \"III\", \"2\", \"3\", \"II\" default (\"2\" synonym). idata optional data frame giving factor factors defining intra-subject model multivariate repeated-measures data. See Details Anova explanation intra-subject design explanation arguments relating intra-subject factors. idesign one-sided model formula using ``data'' idata specifying intra-subject design repeated measure models. icontrasts names contrast-generating functions applied default factors ordered factors, respectively, within-subject ``data''; contrasts must produce intra-subject model matrix different terms orthogonal. default c(\"contr.sum\", \"contr.poly\"). imatrix lieu idata idesign, can specify intra-subject design matrix directly via imatrix, form list named elements. element gives columns within-subject model matrix intra-subject term tested, must many rows responses; columns within-subject model matrix different terms must mutually orthogonal. iterm repeated measures designs, must specify one intra-subject term (character string) select SSPE (E) matrix used plot. Hypothesis terms plotted include iterm effect well interactions iterm terms. manova optional Anova.mlm object model; absent MANOVA computed. Specifying argument can therefore save computation repeated calls. size scale hypothesis ellipse relative error ellipse; \"evidence\", default, scaling done ``significant'' hypothesis ellipse extends outside error ellipse; \"effect.size\", hypothesis ellipse scale error ellipse. level equivalent coverage ellipse normally-distributed errors, defaults 0.68. alpha significance level Roy's greatest-root test statistic; size=\"evidence\", hypothesis ellipse scaled just touches error ellipse specified alpha level; larger hypothesis ellipse therefore indicates statistical significance; defaults 0.05. center.pch character use plotting centroid data; defaults \"|\". col color vector colors use plotting ellipses; first color used error ellipse; remaining colors --- recycled necessary --- used hypothesis ellipses. single color can given, case used ellipses. convenience, default colors heplots produced given session can changed assigning color vector via options(heplot.colors =c(...). Otherwise, default colors c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\"). lty vector line types use plotting ellipses; first used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single line type can given. Defaults 2:1. lwd vector line widths use plotting ellipses; first used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single line width can given. Defaults 1:2. xlab x-axis label; defaults name x variable. main main plot label; defaults \"\". xlim x-axis limits; absent, computed data. axes Whether draw x, y axes; defaults TRUE offset.axes proportion extend axes direction computed data; optional. add TRUE, add current plot; default FALSE. TRUE, error ellipse plotted. verbose TRUE, print MANOVA table details hypothesis tests; default FALSE.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"One-Dimensional HE Plots — heplot1d","text":"function invisibly returns object class \"heplot1d\", coordinates various hypothesis ellipses error ellipse, limits horizontal vertical axes. (methods manipulating objects currently available.) components : H ranges hypothesis terms E range E xlim x-axis limits","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"One-Dimensional HE Plots — heplot1d","text":"particular, given response, 1-D representations H E matrices correspond line segments. E ``ellipse'' shown filled rectangle whose width equals mean squared error response. H ``ellipse'' model term shown line segment whose length represents either size effect evidence effect. version initial sketch. Details implementation subject change.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"One-Dimensional HE Plots — heplot1d","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot1d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"One-Dimensional HE Plots — heplot1d","text":"","code":"## Plastics data plastic.mod <- lm(cbind(tear, gloss, opacity) ~ rate*additive, data=Plastic) heplot1d(plastic.mod, col=c(\"pink\",\"blue\")) heplot1d(plastic.mod, col=c(\"pink\",\"blue\"),variables=2) heplot1d(plastic.mod, col=c(\"pink\",\"blue\"),variables=3) ## Bees data bees.mod <- lm(cbind(Iz,Iy) ~ caste*treat*time, data=Bees) heplot1d(bees.mod) heplot1d(bees.mod, variables=2)"},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Three-Dimensional HE Plots — heplot3d","title":"Three-Dimensional HE Plots — heplot3d","text":"function plots ellipsoids 3D representing hypothesis error sums--squares--products matrices terms linear hypotheses multivariate linear model.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Three-Dimensional HE Plots — heplot3d","text":"","code":"heplot3d(mod, ...) # S3 method for mlm heplot3d( mod, terms, hypotheses, term.labels = TRUE, hyp.labels = TRUE, err.label = \"Error\", variables = 1:3, error.ellipsoid = !add, factor.means = !add, grand.mean = !add, remove.intercept = TRUE, type = c(\"II\", \"III\", \"2\", \"3\"), idata = NULL, idesign = NULL, icontrasts = c(\"contr.sum\", \"contr.poly\"), imatrix = NULL, iterm = NULL, manova, size = c(\"evidence\", \"effect.size\"), level = 0.68, alpha = 0.05, segments = 40, col = getOption(\"heplot3d.colors\", c(\"red\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\")), lwd = c(1, 4), shade = TRUE, shade.alpha = 0.2, wire = c(TRUE, FALSE), bg.col = c(\"white\", \"black\"), fogtype = c(\"none\", \"exp2\", \"linear\", \"exp\"), fov = 30, offset = 0.01, xlab, ylab, zlab, xlim, ylim, zlim, cex.label = 1.5, add = FALSE, verbose = FALSE, warn.rank = FALSE, ... )"},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Three-Dimensional HE Plots — heplot3d","text":"mod model object class \"mlm\". ... arguments passed generic. terms logical value character vector terms model plot hypothesis matrices; missing TRUE, defaults terms; FALSE, terms plotted. hypotheses optional list linear hypotheses plot hypothesis matrices; hypotheses specified linearHypothesis function car package; list elements can named, case names used. term.labels logical value character vector names terms plotted. TRUE (default) names terms used; FALSE, term labels plotted. hyp.labels logical value character vector names hypotheses plotted. TRUE (default) names components list hypotheses used; FALSE, hypothesis labels plotted. err.label Label error ellipse variables indices names three response variables plotted; defaults 1:3. error.ellipsoid TRUE, plot error ellipsoid; defaults TRUE, argument add FALSE (see ). factor.means logical value character vector names factors means plotted, TRUE FALSE; defaults TRUE, argument add FALSE (see ). grand.mean TRUE, plot centroid data; defaults TRUE, argument add FALSE (see ). remove.intercept TRUE (default), plot ellipsoid intercept even MANOVA table. type ``type'' sum--squares--products matrices compute; one \"II\", \"III\", \"2\", \"3\", \"II\" default (\"2\" synonym). idata optional data frame giving factor factors defining intra-subject model multivariate repeated-measures data. See Details Anova explanation intra-subject design explanation arguments relating intra-subject factors. idesign one-sided model formula using ``data'' idata specifying intra-subject design repeated measure models. icontrasts names contrast-generating functions applied default factors ordered factors, respectively, within-subject ``data''; contrasts must produce intra-subject model matrix different terms orthogonal. default c(\"contr.sum\", \"contr.poly\"). imatrix lieu idata idesign, can specify intra-subject design matrix directly via imatrix, form list named elements. element gives columns within-subject model matrix intra-subject term tested, must many rows responses; columns within-subject model matrix different terms must mutually orthogonal. iterm repeated measures designs, must specify one intra-subject term (character string) select SSPE (E) matrix used plot. Hypothesis terms plotted include iterm effect well interactions iterm terms. manova optional Anova.mlm object model; absent MANOVA computed. Specifying argument can therefore save computation repeated calls. size scale hypothesis ellipsoid relative error ellipsoid; \"evidence\", default, scaling done ``significant'' hypothesis ellipsoid extends outside error ellipsoid; \"effect.size\", hypothesis ellipsoid scale error ellipsoid. level equivalent coverage ellipsoid normally-distributed errors, defaults 0.68. alpha significance level Roy's greatest-root test statistic; size=\"evidence\", hypothesis ellipsoid scaled just touches error ellipsoid specified alpha level; larger hypothesis ellipsoid therefore indicates statistical significance; defaults 0.05. segments number segments composing ellipsoid; defaults 40. col color vector colors use plotting ellipsoids; first color used error ellipsoid; remaining colors --- recycled necessary --- used hypothesis ellipsoid. single color can given, case used ellipsoid. convenience, default colors heplots produced given session can changed assigning color vector via options(heplot3d.colors=c(...). Otherwise, default colors c(\"pink\", \"blue\", \"black\", \"darkgreen\", \"darkcyan\", \"magenta\", \"brown\", \"darkgray\"). lwd two-element vector giving line width drawing ellipsoids (including degenerate ellipse) drawing ellipsoids degenerate line segment. default c(1, 4). shade logical scalar vector, indicating whether ellipsoids rendered shade3d. Works like col, except FALSE used 1 df degenerate ellipsoid. shade.alpha numeric value range [0,1], vector values, giving alpha transparency ellipsoids rendered shade=TRUE. wire logical scalar vector, indicating whether ellipsoids rendered wire3d. Works like col, except TRUE used 1 df degenerate ellipsoid. bg.col background colour, \"white\" \"black\", defaulting \"white\". fogtype type ``fog'' use depth-cueing; default \"none\". See bg. fov field view angle; controls perspective. See viewpoint. offset proportion axes set labels; defaults 0.01. xlab x-axis label; defaults name x variable. ylab y-axis label; defaults name y variable. zlab z-axis label; defaults name z variable. xlim x-axis limits; absent, computed data. ylim y-axis limits; absent, computed data. zlim z-axis limits; absent, computed data. cex.label text size ellipse labels add TRUE, add current plot; default FALSE. TRUE, error ellipsoid neither plotted returned output object. verbose TRUE, print MANOVA table details hypothesis tests; default FALSE. warn.rank TRUE, suppress warnings rank hypothesis matrix ellipsoid collapses ellipse line; default FALSE.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Three-Dimensional HE Plots — heplot3d","text":"heplot3d invisibly returns list containing bounding boxes error (E) ellipsoid term linear hypothesis specified call. 2 x 3 matrix rownames \"min\" \"max\" colnames corresponding variables plotted. additional component, center, contains coordinates centroid plot. function also leaves object named .frame global environment, containing rgl object IDs axes, axis labels, bounding box; deleted axes, etc. redrawn plot added .","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Three-Dimensional HE Plots — heplot3d","text":"H matrix term rank < 3, ellipsoid collapses ellipse (rank(H)=2) line (rank(H)=1). Rotating plot can particularly revealing, showing views H variation particularly large small relation E variation. See play3d movie3d details creating animations. arguments xlim, ylim, zlim can used expand bounding box axes, decrease .","code":""},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Three-Dimensional HE Plots — heplot3d","text":"Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples Journal Statistical Software, 17(6), 1-42. https://www.jstatsoft.org/v17/i06/ Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421-444. http://datavis.ca/papers/jcgs-heplots.pdf","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/heplot3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Three-Dimensional HE Plots — heplot3d","text":"","code":"# Soils data, from carData package data(Soils, package = \"carData\") soils.mod <- lm(cbind(pH,N,Dens,P,Ca,Mg,K,Na,Conduc) ~ Block + Contour*Depth, data=Soils) car::Anova(soils.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Block 3 1.6758 3.7965 27 81 1.777e-06 *** #> Contour 2 1.3386 5.8468 18 52 2.730e-07 *** #> Depth 3 1.7951 4.4697 27 81 8.777e-08 *** #> Contour:Depth 6 1.2351 0.8640 54 180 0.7311 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(soils.mod, variables=c(\"Ca\", \"Mg\")) pairs(soils.mod, terms=\"Depth\", variables=c(\"pH\", \"N\", \"P\", \"Ca\", \"Mg\")) heplot3d(soils.mod, variables=c(\"Mg\", \"Ca\", \"Na\"), wire=FALSE) # Plastic data plastic.mod <- lm(cbind(tear, gloss, opacity) ~ rate*additive, data=Plastic) if (FALSE) { heplot3d(plastic.mod, col=c(\"red\", \"blue\", \"brown\", \"green3\"), wire=FALSE) }"},{"path":"https://friendly.github.io/heplots/reference/heplots-internal.html","id":null,"dir":"Reference","previous_headings":"","what":"Internal heplots functions — heplots-internal","title":"Internal heplots functions — heplots-internal","text":"Internal functions heplots package","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-internal.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Internal heplots functions — heplots-internal","text":"","code":"lambda.crit( alpha, p, dfh, dfe, test.statistic = c(\"Roy\", \"HLT\", \"Hotelling-Lawley\") ) Roy.crit(alpha, p, dfh, dfe) HLT.crit(alpha, p, dfh, dfe) he.rep(x, n) Pillai(eig, q, df.res) Wilks(eig, q, df.res) HL(eig, q, df.res) Roy(eig, q, df.res)"},{"path":"https://friendly.github.io/heplots/reference/heplots-internal.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Internal heplots functions — heplots-internal","text":"alpha significance level critical values multivariate statistics p Number variables dfh degrees freedom hypothesis dfe degrees freedom error test.statistic Test statistic used multivariate test x argument heplot heplot3d repeated Error hypothesis terms n Number hypothesis terms","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-internal.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Internal heplots functions — heplots-internal","text":"critical value test statistic","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-internal.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Internal heplots functions — heplots-internal","text":"functions calculate critical values multivariate test statistics (Wilks' Lambda, Hotelling-Lawley trace, Roy's maximum root test) used setting size H ellipses relative E. intended called user.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-internal.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Internal heplots functions — heplots-internal","text":"Michael Friendly friendly@yorku.ca","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-package.html","id":null,"dir":"Reference","previous_headings":"","what":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"heplots package provides functions visualizing hypothesis tests multivariate linear models (MANOVA, multivariate multiple regression, MANCOVA, repeated measures designs). plots represent sums--squares--products matrices linear hypotheses error using ellipses (two dimensions), ellipsoids (three dimensions), line segments one dimension.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"basic theory behind plots described Friendly (2007). See Fox, Friendly Monette (2007) brief introduction; Friendly & Sigal (2016) tutorial methods; Friendly, Monette Fox (2013) general discussion role elliptical geometry statistical understanding. topics now addressed include robust MLMs, tests equality covariance matrices MLMs, chi square Q-Q plots MLMs. package also provides collection data sets illustrating variety multivariate linear models types listed , together graphical displays. Several tutorial vignettes also included. See vignette(package=\"heplots\"). graphical functions contained display multivariate model effects variable (data) space, one response variables (contrasts among response variables repeated measures designs). list(list(\"heplot\")) constructs two-dimensional plots model terms linear hypotheses pairs response variables multivariate linear models. list(list(\"heplot3d\")) constructs analogous 3D plots triples response variables. list(list(\"pairs.mlm\")) constructs ``matrix'' pairwise plots. list(list(\"heplot1d\")) constructs 1-dimensional analogs plots model terms linear hypotheses single response variables. repeated measure designs, -subject effects within-subject effects must plotted separately, error terms (E matrices) differ. terms involving within-subject effects, functions carry linear transformation matrix Y responses matrix Y M, M model matrix term intra-subject design produce plots H E matrices transformed space. vignette repeated describes graphical methods repeated measures designs. related car package calculates Type II Type III tests multivariate linear hypotheses using Anova linearHypothesis functions. candisc-package package provides functions visualizing effects MLM model terms low-dimensional canonical space shows largest hypothesis relative error variation. candisc package now also includes related methods canonical correlation analysis. heplots package also contains large number multivariate data sets examples analyses graphic displays. Use data(package=\"heplots\") see current list.","code":""},{"path":"https://friendly.github.io/heplots/reference/heplots-package.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples. Journal Statistical Software, 17(6), 1-42. https://www.jstatsoft.org/v17/i06/, doi:10.18637/jss.v017.i06 Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421-444. http://datavis.ca/papers/jcgs-heplots.pdf, doi:10.1198/106186007X208407 Fox, J., Friendly, M. & Monette, G. (2007). Visual hypothesis tests multivariate linear models: heplots package R. DSC 2007: Directions Statistical Computing. https://socialsciences.mcmaster.ca/jfox/heplots-dsc-paper.pdf Friendly, M. (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 . Fox, J., Friendly, M. & Weisberg, S. (2013). Hypothesis Tests Multivariate Linear Models Using car Package. R Journal, 5(1), https://journal.r-project.org/archive/2013-1/fox-friendly-weisberg.pdf. Friendly, M., Monette, G. & Fox, J. (2013). Elliptical Insights: Understanding Statistical Methods Elliptical Geometry. Statistical Science, 2013, 28 (1), 1-39, http://datavis.ca/papers/ellipses.pdf. Friendly, M. & Sigal, M. (2014). Recent Advances Visualizing Multivariate Linear Models. Revista Colombiana de Estadistica, 37, 261-283 Friendly, M. & Sigal, M. (2016). Graphical Methods Multivariate Linear Models Psychological Research: R Tutorial. Submitted publication.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/heplots-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Visualizing Hypothesis Tests in Multivariate Linear Models — heplots-package","text":"Michael Friendly, John Fox, Georges Monette Maintainer: Michael Friendly, friendly@yorku.ca, http://datavis.ca","code":""},{"path":"https://friendly.github.io/heplots/reference/Hernior.html","id":null,"dir":"Reference","previous_headings":"","what":"Recovery from Elective Herniorrhaphy — Hernior","title":"Recovery from Elective Herniorrhaphy — Hernior","text":"data set measures post-operative recovery 32 patients undergoing elective herniorrhaphy operation, relation pre-operative measures.","code":""},{"path":"https://friendly.github.io/heplots/reference/Hernior.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Recovery from Elective Herniorrhaphy — Hernior","text":"data frame 32 observations following 9 variables. age patient age sex patient sex, factor levels f m pstat physical status (ignoring associated operation). 1-5 scale, 1=perfect health, 5=poor health. build body build, 1-5 scale, 1=emaciated, 2=thin, 3=average, 4=fat, 5=obese. cardiac preoperative complications heart, 1-4 scale, 1=none, 2=mild, 3=moderate, 4=severe. resp preoperative complications respiration, 1-4 scale, 1=none, 2=mild, 3=moderate, 4=severe. leave condition upon leaving recovery room, 1-4 scale, 1=routine recovery, 2=intensive care observation overnight, 3=intensive care, moderate care required, 4=intensive care, moderate care required. los length stay hospital operation (days) nurse level nursing required one week operation, 1-5 scale, 1=intense, 2=heavy, 3=moderate, 4=light, 5=none (?); see Details","code":""},{"path":"https://friendly.github.io/heplots/reference/Hernior.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Recovery from Elective Herniorrhaphy — Hernior","text":"Mosteller, F. Tukey, J. W. (1977), Data analysis regression, Reading, MA: Addison-Wesley. Data Exhibit 8, 567-568. source: study B. McPeek J. P. Gilbert Harvard Anesthesia Center.","code":""},{"path":"https://friendly.github.io/heplots/reference/Hernior.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Recovery from Elective Herniorrhaphy — Hernior","text":"leave, nurse los outcome measures; remaining variables potential predictors recovery status. variable nurse recorded 1-4, remaining (20) entries entered \"-\" sources. clear whether means \"none\" NA. former interpretation used constructing R data frame, nurse==5 observations. Using Hernior$nurse[Hernior$nurse==5] <- NA change interpretation, render nurse useless multivariate analysis. ordinal predictors instead treated factors, also potential interactions explored.","code":""},{"path":"https://friendly.github.io/heplots/reference/Hernior.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Recovery from Elective Herniorrhaphy — Hernior","text":"Hand, D. J., Daly, F., Lunn, . D., McConway, K. J. Ostrowski, E. (1994), Handbook Small Data Sets, Number 484, 390-391.","code":""},{"path":"https://friendly.github.io/heplots/reference/Hernior.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Recovery from Elective Herniorrhaphy — Hernior","text":"","code":"library(car) data(Hernior) str(Hernior) #> 'data.frame':\t32 obs. of 9 variables: #> $ age : int 78 60 68 62 76 76 64 74 68 79 ... #> $ sex : Factor w/ 2 levels \"f\",\"m\": 2 2 2 2 2 2 2 1 2 1 ... #> $ pstat : int 2 2 2 3 3 1 1 2 3 2 ... #> $ build : int 3 3 3 5 4 3 2 3 4 2 ... #> $ cardiac: int 1 2 1 3 3 1 1 2 2 1 ... #> $ resp : int 1 2 1 1 2 1 2 2 1 1 ... #> $ leave : int 2 2 1 1 2 1 1 1 1 2 ... #> $ los : int 9 4 7 35 9 7 5 16 7 11 ... #> $ nurse : num 3 5 4 3 4 5 5 3 5 3 ... Hern.mod <- lm(cbind(leave, nurse, los) ~ age + sex + pstat + build + cardiac + resp, data=Hernior) car::Anova(Hern.mod, test=\"Roy\") # actually, all tests are identical #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> age 1 0.16620 1.2742 3 23 0.30668 #> sex 1 0.02681 0.2055 3 23 0.89150 #> pstat 1 0.50028 3.8355 3 23 0.02309 * #> build 1 0.34506 2.6455 3 23 0.07318 . #> cardiac 1 0.29507 2.2622 3 23 0.10820 #> resp 1 0.32969 2.5277 3 23 0.08245 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test overall regression print(linearHypothesis(Hern.mod, c(\"age\", \"sexm\", \"pstat\", \"build\", \"cardiac\", \"resp\")), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 6 1.1019849 2.419161 18 75.00000 0.00413563 ** #> Wilks 6 0.2173439 2.604648 18 65.53911 0.00252395 ** #> Hotelling-Lawley 6 2.2679660 2.729959 18 65.00000 0.00162850 ** #> Roy 6 1.5543375 6.476406 6 25.00000 0.00032318 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # joint test of age, sex & caridac print(linearHypothesis(Hern.mod, c(\"age\", \"sexm\", \"cardiac\")), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 3 0.3826974 1.218485 9 75.00000 0.296709 #> Wilks 3 0.6305421 1.301115 9 56.12656 0.257126 #> Hotelling-Lawley 3 0.5649409 1.360043 9 65.00000 0.224709 #> Roy 3 0.5249507 4.374589 3 25.00000 0.013162 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # HE plots clr <- c(\"red\", \"darkgray\", \"blue\", \"darkgreen\", \"magenta\", \"brown\", \"black\") heplot(Hern.mod, col=clr) pairs(Hern.mod, col=clr) ## Enhancing the pairs plot ... # create better variable labels vlab <- c(\"LeaveCondition\\n(leave)\", \"NursingCare\\n(nurse)\", \"LengthOfStay\\n(los)\") # Add ellipse to test all 5 regressors simultaneously hyp <- list(\"Regr\" = c(\"age\", \"sexm\", \"pstat\", \"build\", \"cardiac\", \"resp\")) pairs(Hern.mod, hypotheses=hyp, col=clr, var.labels=vlab) ## Views in canonical space for the various predictors if (require(candisc)) { Hern.canL <- candiscList(Hern.mod) plot(Hern.canL, term=\"age\") plot(Hern.canL, term=\"sex\") plot(Hern.canL, term=\"pstat\") # physical status } #> Loading required package: candisc #> #> Attaching package: 'candisc' #> The following object is masked from 'package:stats': #> #> cancor"},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot an Interpolation Between Two Related Data Sets — interpPlot","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"Plot interpolation two related data sets, typically transformations . function designed used animations.","code":""},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"","code":"interpPlot( xy1, xy2, alpha, xlim, ylim, points = TRUE, add = FALSE, col = palette()[1], ellipse = FALSE, ellipse.args = NULL, abline = FALSE, col.lines = palette()[2], lwd = 2, id.method = \"mahal\", labels = rownames(xy1), id.n = 0, id.cex = 1, id.col = palette()[1], segments = FALSE, segment.col = \"darkgray\", ... )"},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"xy1 First data set, 2-column matrix data.frame xy2 Second data set, 2-column matrix data.frame alpha value interpolation fraction, typically (necessarily) 0 <= alpha <= 1). xlim, ylim x, y limits plot. specified, function uses ranges rbind(xy1, xy2). points Logical. Whether plot points current interpolation? add Logical. Whether add existing plot? col Color plotted points. ellipse logical. TRUE plot dataEllipse ellipse.args arguments passed dataEllipse abline logical. TRUE plot linear regression line XY col.lines line color lwd line width id.method points identified. See showLabels. labels observation labels id.n Number points identified. set zero, points identified. id.cex Controls size plotted labels. default 1 id.col Controls color plotted labels. segments logical. TRUE draw lines segments xy1 xy segment.col line color segments ... arguments passed plot()","code":""},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"Returns invisibly interpolated XY points.","code":""},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"Points plotted via linear interpolation, $$ XY = XY1 + \\alpha (XY2 - XY1)$$ function allows plotting data ellipse, linear regression line, line segments showing movement points. Interpolations linear can obtained using non-linear series alpha values. example alpha=sin(seq(0,1,.1)/sin(1) give sinusoid interpolation.","code":""},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"examples just use -screen animations console graphics window. animation package provides facilities save various formats.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/interpPlot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot an Interpolation Between Two Related Data Sets — interpPlot","text":"","code":"################################################# # animate an AV plot from marginal to conditional ################################################# data(Duncan, package=\"carData\") duncmod <- lm(prestige ~ income + education, data=Duncan) mod.mat <- model.matrix(duncmod) # function to do an animation for one variable dunc.anim <- function(variable, other, alpha=seq(0, 1, .1)) { var <- which(variable==colnames(mod.mat)) duncdev <- scale(Duncan[,c(variable, \"prestige\")], scale=FALSE) duncav <- lsfit(mod.mat[, -var], cbind(mod.mat[, var], Duncan$prestige), intercept = FALSE)$residuals colnames(duncav) <- c(variable, \"prestige\") lims <- apply(rbind(duncdev, duncav),2,range) for (alp in alpha) { main <- if(alp==0) paste(\"Marginal plot:\", variable) else paste(round(100*alp), \"% Added-variable plot:\", variable) interpPlot(duncdev, duncav, alp, xlim=lims[,1], ylim=lims[,2], pch=16, main = main, xlab = paste(variable, \"| \", alp, other), ylab = paste(\"prestige | \", alp, other), ellipse=TRUE, ellipse.args=(list(levels=0.68, fill=TRUE, fill.alpha=alp/2)), abline=TRUE, id.n=3, id.cex=1.2, cex.lab=1.25) Sys.sleep(1) } } # show these in the R console if(interactive()) { dunc.anim(\"income\", \"education\") dunc.anim(\"education\", \"income\") } ############################################ # correlated bivariate data with 2 outliers # show rotation from data space to PCA space ############################################ set.seed(123345) x <- c(rnorm(100), 2, -2) y <- c(x[1:100] + rnorm(100), -2, 2) XY <- cbind(x=x, y=y) rownames(XY) <- seq_along(x) XY <- scale(XY, center=TRUE, scale=FALSE) # start, end plots car::dataEllipse(XY, pch=16, levels=0.68, id.n=2) #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter mod <- lm(y~x, data=as.data.frame(XY)) abline(mod, col=\"red\", lwd=2) pca <- princomp(XY, cor=TRUE) scores <- pca$scores car::dataEllipse(scores, pch=16, levels=0.68, id.n=2) #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter #> Warning: \"id.n\" is not a graphical parameter abline(lm(Comp.2 ~ Comp.1, data=as.data.frame(scores)), lwd=2, col=\"red\") # show interpolation # functions for labels, as a function of alpha main <- function(alpha) {if(alpha==0) \"Original data\" else if(alpha==1) \"PCA scores\" else paste(round(100*alpha,1), \"% interpolation\")} xlab <- function(alpha) {if(alpha==0) \"X\" else if(alpha==1) \"PCA.1\" else paste(\"X +\", alpha, \"(X - PCA.1)\")} ylab <- function(alpha) {if(alpha==0) \"Y\" else if(alpha==1) \"PCA.2\" else paste(\"Y +\", alpha, \"(Y - PCA.2)\")} interpPCA <- function(XY, alpha = seq(0,1,.1)) { XY <- scale(XY, center=TRUE, scale=FALSE) if (is.null(rownames(XY))) rownames(XY) <- 1:nrow(XY) pca <- princomp(XY, cor=TRUE) scores <- pca$scores for (alp in alpha) { interpPlot(XY, scores, alp, pch=16, main = main(alp), xlab = xlab(alp), ylab = ylab(alp), ellipse=TRUE, ellipse.args=(list(levels=0.68, fill=TRUE, fill.alpha=(1-alp)/2)), abline=TRUE, id.n=2, id.cex=1.2, cex.lab=1.25, segments=TRUE) Sys.sleep(1) } } # show in R console if(interactive()) { interpPCA(XY) } if (FALSE) { library(animation) saveGIF({ interpPCA(XY, alpha <- seq(0,1,.1))}, movie.name=\"outlier-demo.gif\", ani.width=480, ani.height=480, interval=1.5) }"},{"path":"https://friendly.github.io/heplots/reference/Iwasaki_Big_Five.html","id":null,"dir":"Reference","previous_headings":"","what":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","title":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","text":"dataset, Grice & Iwasaki (2007), gives scores five personality scales NEO PI-r (Costa & McCrae, 1992), called \"Big Five\" personality traits: Neuroticism, Extraversion, Openness--Experience, Agreeableness, Conscientiousness.","code":""},{"path":"https://friendly.github.io/heplots/reference/Iwasaki_Big_Five.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","text":"data frame 203 observations following 7 variables. ID ID number Group factor levels Eur Asian_Amer Asian_Intl N Neuroticism score E Extraversion score O Openness score Agreeableness score C Conscientiousness score","code":""},{"path":"https://friendly.github.io/heplots/reference/Iwasaki_Big_Five.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","text":"Grice, J., & Iwasaki, M. (2007). truly multivariate approach MANOVA. Applied Multivariate Research, 12, 199-226. https://doi.org/10.22329/amr.v12i3.660.","code":""},{"path":"https://friendly.github.io/heplots/reference/Iwasaki_Big_Five.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","text":"groups : Eur European Americans (Caucasians living United States entire lives) Asian_Amer Asian Americans (Asians living United States since age 6 years) Asian_Intl Asian Internationals (Asians moved United States 6th birthday) factor Group set compare E vs. Asian two Asian groups","code":""},{"path":"https://friendly.github.io/heplots/reference/Iwasaki_Big_Five.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","text":"Costa Jr, P. T., & McCrae, R. R. (1992). Revised NEO Personality Inventory (NEO PI-R) NEO Five-Factor Inventory (NEOFFI) professional manual. Psychological Assessment Resources.","code":""},{"path":"https://friendly.github.io/heplots/reference/Iwasaki_Big_Five.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Personality Traits of Cultural Groups — Iwasaki_Big_Five","text":"","code":"data(Iwasaki_Big_Five) # use Helmert contrasts for groups contrasts(Iwasaki_Big_Five$Group) <- matrix(c(2, -1, -1, 0, -1, 1), ncol=2) str(Iwasaki_Big_Five) #> tibble [203 × 7] (S3: tbl_df/tbl/data.frame) #> $ ID : num [1:203] 1 2 3 4 5 6 7 8 9 10 ... #> $ Group: Factor w/ 3 levels \"Eur\",\"Asian_Amer\",..: 3 3 3 3 3 3 3 3 3 3 ... #> ..- attr(*, \"contrasts\")= num [1:3, 1:2] 2 -1 -1 0 -1 1 #> .. ..- attr(*, \"dimnames\")=List of 2 #> .. .. ..$ : chr [1:3] \"Eur\" \"Asian_Amer\" \"Asian_Intl\" #> .. .. ..$ : NULL #> $ N : num [1:203] 87 101 63 104 70 63 77 123 76 59 ... #> $ E : num [1:203] 117 134 135 118 114 131 140 122 141 133 ... #> $ O : num [1:203] 130 123 111 108 110 108 118 115 109 104 ... #> $ A : num [1:203] 124 115 71 107 119 125 131 99 134 130 ... #> $ C : num [1:203] 127 124 134 111 120 138 103 107 142 126 ... Big5.mod <- lm(cbind(N, E, O, A, C) ~ Group, data=Iwasaki_Big_Five) coef(Big5.mod) #> N E O A C #> (Intercept) 96.0172751 116.4677513 117.247751 114.311746 111.8603175 #> Group1 0.5092196 -0.7428042 4.867196 2.683413 0.7394841 #> Group2 -1.5613889 9.0161111 1.019444 5.211667 2.7458333 car::Anova(Big5.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Group 2 0.41862 10.43 10 394 1.106e-15 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test contrasts car::linearHypothesis(Big5.mod, \"Group1\", title = \"Eur vs Asian\") #> #> Sum of squares and products for the hypothesis: #> N E O A C #> N 94.62635 -138.0325 904.4526 498.6485 137.4155 #> E -138.03251 201.3495 -1319.3351 -727.3840 -200.4496 #> O 904.45262 -1319.3351 8644.8915 4766.1554 1313.4380 #> A 498.64846 -727.3840 4766.1554 2627.7065 724.1328 #> C 137.41555 -200.4496 1313.4380 724.1328 199.5536 #> #> Sum of squares and products for error: #> N E O A C #> N 90650.37 -19544.030 -2139.170 -6905.080 -31111.087 #> E -19544.03 68087.407 25963.127 -5340.435 24283.356 #> O -2139.17 25963.127 58283.593 10117.645 6850.589 #> A -6905.08 -5340.435 10117.645 61033.794 3838.257 #> C -31111.09 24283.356 6850.589 3838.257 68134.095 #> #> Multivariate Tests: Eur vs Asian #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.1821649 8.731426 5 196 1.7084e-07 *** #> Wilks 1 0.8178351 8.731426 5 196 1.7084e-07 *** #> Hotelling-Lawley 1 0.2227405 8.731426 5 196 1.7084e-07 *** #> Roy 1 0.2227405 8.731426 5 196 1.7084e-07 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 car::linearHypothesis(Big5.mod, \"Group2\", title = \"Asian: Amer vs Inter\") #> #> Sum of squares and products for the hypothesis: #> N E O A C #> N 358.2272 -2068.553 -233.8897 -1195.7052 -629.9726 #> E -2068.5535 11944.691 1350.5766 6904.5011 3637.7248 #> O -233.8897 1350.577 152.7086 780.6864 411.3146 #> A -1195.7052 6904.501 780.6864 3991.0731 2102.7480 #> C -629.9726 3637.725 411.3146 2102.7480 1107.8597 #> #> Sum of squares and products for error: #> N E O A C #> N 90650.37 -19544.030 -2139.170 -6905.080 -31111.087 #> E -19544.03 68087.407 25963.127 -5340.435 24283.356 #> O -2139.17 25963.127 58283.593 10117.645 6850.589 #> A -6905.08 -5340.435 10117.645 61033.794 3838.257 #> C -31111.09 24283.356 6850.589 3838.257 68134.095 #> #> Multivariate Tests: Asian: Amer vs Inter #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.2385785 12.28265 5 196 2.2803e-10 *** #> Wilks 1 0.7614215 12.28265 5 196 2.2803e-10 *** #> Hotelling-Lawley 1 0.3133330 12.28265 5 196 2.2803e-10 *** #> Roy 1 0.3133330 12.28265 5 196 2.2803e-10 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # heplots labs <- c(\"Neuroticism\", \"Extraversion\", \"Openness\", \"Agreeableness\", \"Conscientiousness\" ) heplot(Big5.mod, fill = TRUE, fill.alpha = 0.2, cex.lab = 1.5, xlab = labs[1], ylab = labs[2]) heplot(Big5.mod, variables = c(2,5), fill = TRUE, fill.alpha = 0.2, cex.lab = 1.5, xlab = labs[2], ylab = labs[5]) pairs(Big5.mod, fill = TRUE, fill.alpha = 0.2, var.labels = labs) # canonical discriminant analysis if (require(candisc)) { library(candisc) Big5.can <- candisc(Big5.mod) Big5.can heplot(Big5.can, fill = TRUE, fill.alpha = 0.1) } #> Vector scale factor set to 5.44373"},{"path":"https://friendly.github.io/heplots/reference/label.ellipse.html","id":null,"dir":"Reference","previous_headings":"","what":"Label an ellipse — label.ellipse","title":"Label an ellipse — label.ellipse","text":"label.ellipse used draw text label ellipse center somewhere around periphery flexible way.","code":""},{"path":"https://friendly.github.io/heplots/reference/label.ellipse.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Label an ellipse — label.ellipse","text":"","code":"label.ellipse( ellipse, label, col = \"black\", label.pos = NULL, xpd = TRUE, tweak = 0.5 * c(strwidth(\"M\"), strheight(\"M\")), ... )"},{"path":"https://friendly.github.io/heplots/reference/label.ellipse.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Label an ellipse — label.ellipse","text":"ellipse two-column matrix coordinates ellipse boundary label Character string used ellipse label col Label color label.pos Label position relative ellipse. See details xpd label allowed extend beyond plot limits? tweak vector two lengths used tweak label positions ... parameters passed text, e.g., cex, ...","code":""},{"path":"https://friendly.github.io/heplots/reference/label.ellipse.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Label an ellipse — label.ellipse","text":"label.pos=NULL, function uses sign correlation represented ellipse determine position top (\\(r>=0\\)) bottom (\\(r<0\\)) ellipse. Integer values 0, 1, 2, 3 4, respectively indicate positions center, , left , right max/min coordinates ellipse. Label positions can also specified corresponding character strings c(\"center\", \"bottom\", \"left\", \"top\", \"right\"), compass directions, c(\"C\", \"S\", \"W\", \"N\", \"E\"), integer label.pos values, 5:nrow(ellipse) taken indices row coordinates used ellipse label. Equivalently, label.pos can also fraction (0,1), interpreted fraction way around unit circle, counterclockwise point (1,0).","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/label.ellipse.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Label an ellipse — label.ellipse","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/label.ellipse.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Label an ellipse — label.ellipse","text":"","code":"circle <- function(center=c(0,0), radius=1, segments=60) { angles <- (0:segments)*2*pi/segments circle <- radius * cbind( cos(angles), sin(angles)) t( c(center) + t( circle )) } label_demo <- function(ell) { plot(-2:2, -2:2, type=\"n\", asp=1, main=\"label.pos values and points (0:60)\") lines(ell, col=\"gray\") points(0, 0, pch=\"+\", cex=2) labs <- c(\"center\", \"bot\", \"left\", \"top\", \"right\") for (i in 0:4) { label.ellipse(ell, label=paste(i, \":\", labs[i+1]), label.pos = i) } for( i in 5*c(1,2, 4,5, 7,8, 10,11)) { points(ell[i,1], ell[i,2], pch=16) label.ellipse(ell, label=i, label.pos=i) } } circ <- circle(radius=1.8) label_demo(circ) ell <-circ %*% chol(matrix( c(1, .5, .5, 1), 2, 2)) label_demo(ell)"},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":null,"dir":"Reference","previous_headings":"","what":"Levene Tests of Homogeneity of Variances — leveneTests","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"function extends leveneTest multivariate response setting. performs Levene test homogeneity variances set response variables, prints compact summary.","code":""},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"","code":"leveneTests(y, group, center = median, ...)"},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"y data frame matrix numeric response variables multivariate linear model. group vector factor object giving group corresponding elements rows y center name function compute center group; mean gives original Levene's (1960) test; default, median, provides robust test suggested Brown Forsythe (1974). ... arguments, passed leveneTest","code":""},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"object classes \"anova\" \"data.frame\", one observation response variable y.","code":""},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"Levene, H. (1960). Robust Tests Equality Variances. Olkin, . et al. (Eds.), Contributions Probability Statistics: Essays Honor Harold Hotelling, Stanford University Press, 278-292. Brown, M. B. & Forsythe, . B. (1974). Robust Tests Equality Variances Journal American Statistical Association, 69, 364-367.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/leveneTests.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Levene Tests of Homogeneity of Variances — leveneTests","text":"","code":"leveneTests(iris[,1:4], iris$Species) #> Levene's Tests for Homogeneity of Variance (center = median) #> #> df1 df2 F value Pr(>F) #> Sepal.Length 2 147 6.3527 0.002259 ** #> Sepal.Width 2 147 0.5902 0.555518 #> Petal.Length 2 147 19.4803 3.129e-08 *** #> Petal.Width 2 147 19.8924 2.261e-08 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # handle a 1-column response? leveneTests(iris[,1, drop=FALSE], iris$Species) #> Levene's Tests for Homogeneity of Variance (center = median) #> #> df1 df2 F value Pr(>F) #> Sepal.Length 2 147 6.3527 0.002259 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 data(Skulls, package=\"heplots\") leveneTests(Skulls[,-1], Skulls$epoch) #> Levene's Tests for Homogeneity of Variance (center = median) #> #> df1 df2 F value Pr(>F) #> mb 4 145 1.0367 0.3905 #> bh 4 145 0.7171 0.5816 #> bl 4 145 0.6797 0.6071 #> nh 4 145 1.0418 0.3878"},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"function uses asymptotic results described Cai et. al (2016), Theorem 1, calculate approximate, normal theory confidence intervals (CIs) log determinant one sample covariance matrices.","code":""},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"","code":"logdetCI(cov, n, conf = 0.95, method = 1, bias.adj = TRUE)"},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"cov covariance matrix (named) list covariance matrices, size n sample size, vector sample sizes, one covariance matrix conf confidence level method Three methods provided, based Cai et. al Theorem 1 (method=1), Corollary 1 (method=2) Corollary 2 (method=3), different bias SE values. bias.adj logical; set FALSE exclude bias correction term.","code":""},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"data frame one row covariance matrix. lower upper boundaries confidence intervals. columns logdet, bias, se.","code":""},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"results translated CI via approximation $$ \\log det( \\widehat{\\Sigma} ) - bias \\pm z_{1 - \\alpha/2} \\times SE $$ \\(\\widehat{\\Sigma}\\) sample estimate population covariance matrix, \\(bias\\) bias correction constant \\(SE\\) width factor confidence interval. \\(bias\\) \\(SE\\) functions sample size, \\(n\\) number variables, \\(p\\). function included provide approximation graphical accuracy use Box's M test equality covariance matrices, boxM associated plot.boxM method. Cai et. al (2015) claim Theorem 1 holds either \\(p\\) fixed \\(p(n)\\) growing \\(n\\), long \\(p(n) \\le n\\). Corollary 1 (method=2) special case \\(p\\) fixed. Corollary 2 (method=3) special case \\(0 \\le p/n < 1\\) fixed. properties CI estimator unknown small moderate sample sizes, seems one available. therefore experimental version package subject change future. \\(bias\\) term offsets confidence interval sample estimate \\( \\log det( \\widehat{\\Sigma} ) \\). \\(p\\) large relative \\(n\\), confidence interval may overlap sample estimate. Strictly speaking, estimator applies MLE covariance matrix \\( \\widehat{\\Sigma}\\), .e., using \\(n\\) rather \\(n-1\\) divisor. factor \\((n-1 / n)\\) yet taken account .","code":""},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"Cai, T. T.; Liang, T. & Zhou, H. H. (2015) Law log determinant sample covariance matrix optimal estimation differential entropy high-dimensional Gaussian distributions. Journal Multivariate Analysis, 137, 161-172. doi:10.1016/j.jmva.2015.02.003","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/logdetCI.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate confidence interval for log determinant of covariance matrices — logdetCI","text":"","code":"data(iris) iris.mod <- lm(as.matrix(iris[,1:4]) ~ iris$Species) iris.boxm <- boxM(iris.mod) cov <- c(iris.boxm$cov, list(pooled=iris.boxm$pooled)) n <- c(rep(50, 3), 150) CI <- logdetCI( cov, n=n, conf=.95, method=1) CI #> logdet bias se lower upper #> setosa -13.067360 -0.20598584 0.4062465 -13.657603 -12.065146 #> versicolor -10.874325 -0.20598584 0.4062465 -11.464568 -9.872111 #> virginica -8.927058 -0.20598584 0.4062465 -9.517301 -7.924844 #> pooled -9.958539 -0.06731274 0.2321101 -10.346154 -9.436299 plot(iris.boxm, xlim=c(-14, -8), main=\"Iris data, Box's M test\", gplabel=\"Species\") arrows(CI$lower, 1:4, CI$upper, 1:4, lwd=3, angle=90, len=.1, code=3) CI <- logdetCI( cov, n=n, conf=.95, method=1, bias.adj=FALSE) CI #> logdet bias se lower upper #> setosa -13.067360 0 0.4062465 -13.863589 -12.271132 #> versicolor -10.874325 0 0.4062465 -11.670553 -10.078097 #> virginica -8.927058 0 0.4062465 -9.723287 -8.130830 #> pooled -9.958539 0 0.2321101 -10.413466 -9.503611 plot(iris.boxm, xlim=c(-14, -8), main=\"Iris data, Box's M test\", gplabel=\"Species\") arrows(CI$lower, 1:4, CI$upper, 1:4, lwd=3, angle=90, len=.1, code=3)"},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":null,"dir":"Reference","previous_headings":"","what":"Classical and Robust Mahalanobis Distances — Mahalanobis","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"function convenience wrapper mahalanobis offering also possibility calculate robust Mahalanobis squared distances using MCD MVE estimators center covariance (cov.rob)","code":""},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"","code":"Mahalanobis( x, center, cov, method = c(\"classical\", \"mcd\", \"mve\"), nsamp = \"best\", ... )"},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"x numeric matrix data frame , say, \\(p\\) columns center mean vector data; cov supplied, function simply calls mahalanobis calculate result cov covariance matrix (p x p) data method estimation method used center covariance, one : \"classical\" (product-moment), \"mcd\" (minimum covariance determinant), \"mve\" (minimum volume ellipsoid). nsamp passed cov.rob ... arguments passed cov.rob","code":""},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"vector length nrow(x) containing squared distances.","code":""},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"missing data row x causes NA returned row.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/Mahalanobis.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Classical and Robust Mahalanobis Distances — Mahalanobis","text":"","code":"summary(Mahalanobis(iris[, 1:4])) #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.3195 2.1871 3.0628 3.9733 4.8053 13.1011 summary(Mahalanobis(iris[, 1:4], method=\"mve\")) #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.4461 2.5331 4.0110 5.5585 6.8295 25.7951 summary(Mahalanobis(iris[, 1:4], method=\"mcd\")) #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.4352 2.7301 5.7160 19.2207 36.7121 98.0335"},{"path":"https://friendly.github.io/heplots/reference/mark.H0.html","id":null,"dir":"Reference","previous_headings":"","what":"Mark a point null hypothesis in an HE plot — mark.H0","title":"Mark a point null hypothesis in an HE plot — mark.H0","text":"utility function draw label point 2D (3D) plot corresponding point null hypothesis tested. useful repeated measure designs null hypotheses within-S effects often correspond (0,0).","code":""},{"path":"https://friendly.github.io/heplots/reference/mark.H0.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mark a point null hypothesis in an HE plot — mark.H0","text":"","code":"mark.H0( x = 0, y = 0, z = NULL, label, cex = 2, pch = 19, col = \"green3\", lty = 2, pos = 2 )"},{"path":"https://friendly.github.io/heplots/reference/mark.H0.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Mark a point null hypothesis in an HE plot — mark.H0","text":"x Horizontal coordinate H0 y Vertical coordinate H0 z z coordinate H0. NULL, function assumes heplot3d plot drawn. label Text used label point. Defaults expression(H[0]) 2D plots. cex Point text size. 3D plots, function uses size=5*cex call points3d. pch Plot character. Ignored 3D plots. col Color text, character lines lty Line type vertical horizontal reference lines. drawn lty=0. pos Position text. Ignored 3D plots","code":""},{"path":"https://friendly.github.io/heplots/reference/mark.H0.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Mark a point null hypothesis in an HE plot — mark.H0","text":"None. Used side effect drawing current plot.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/mark.H0.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Mark a point null hypothesis in an HE plot — mark.H0","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/mark.H0.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Mark a point null hypothesis in an HE plot — mark.H0","text":"","code":"Vocab.mod <- lm(cbind(grade8,grade9,grade10,grade11) ~ 1, data=VocabGrowth) idata <-data.frame(grade=ordered(8:11)) heplot(Vocab.mod, type=\"III\", idata=idata, idesign=~grade, iterm=\"grade\", main=\"HE plot for Grade effect\") mark.H0()"},{"path":"https://friendly.github.io/heplots/reference/mathscore.html","id":null,"dir":"Reference","previous_headings":"","what":"Math scores for basic math and word problems — mathscore","title":"Math scores for basic math and word problems — mathscore","text":"Scores two groups school children taught different math teachers tested basic math (BM) problems solving word problems (WP).","code":""},{"path":"https://friendly.github.io/heplots/reference/mathscore.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Math scores for basic math and word problems — mathscore","text":"data frame 12 observations following 3 variables. group factor levels 1 2 BM Basic Math score, numeric vector WP Word Problems score, numeric vector","code":""},{"path":"https://friendly.github.io/heplots/reference/mathscore.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Math scores for basic math and word problems — mathscore","text":"Fictitious data","code":""},{"path":"https://friendly.github.io/heplots/reference/mathscore.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Math scores for basic math and word problems — mathscore","text":"","code":"data(mathscore) str(mathscore) #> 'data.frame':\t12 obs. of 3 variables: #> $ group: Factor w/ 2 levels \"1\",\"2\": 1 1 1 1 1 1 2 2 2 2 ... #> $ BM : int 190 170 180 200 150 180 160 190 150 160 ... #> $ WP : int 90 80 80 120 60 70 120 150 90 130 ... math.mod <- lm(cbind(BM, WP) ~ group, data=mathscore) car::Anova(math.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> group 1 0.86518 28.878 2 9 0.0001213 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # scatterplot with data ellipses car::scatterplot(WP ~ BM | group, data=mathscore, ellipse=list(levels=0.68), smooth=FALSE, pch=c(15,16), legend=list(coords = \"topright\")) # HE plot heplot(math.mod, fill=TRUE, cex=2, cex.lab=1.8, xlab=\"Basic math\", ylab=\"Word problems\")"},{"path":"https://friendly.github.io/heplots/reference/MockJury.html","id":null,"dir":"Reference","previous_headings":"","what":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","title":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","text":"Male participants shown picture one three young women. Pilot work indicated one woman beautiful, another average physical attractiveness, third unattractive. Participants rated woman saw twelve attributes. measures used check manipulation photo.","code":""},{"path":"https://friendly.github.io/heplots/reference/MockJury.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","text":"data frame 114 observations following 17 variables. Attr Attractiveness photo, factor levels Beautiful Average Unattractive Crime Type crime, factor levels Burglary (theft items victim's room) Swindle (conned male victim) Years length sentence given defendant mock juror subject Serious rating serious subject thought defendant's crime exciting rating photo 'exciting' calm rating photo 'calm' independent rating photo 'independent' sincere rating photo 'sincere' warm rating photo 'warm' phyattr rating photo 'physical attractiveness' sociable rating photo 'exciting' kind rating photo 'kind' intelligent rating photo 'intelligent' strong rating photo 'strong' sophisticated rating photo 'sophisticated' happy rating photo 'happy' ownPA self-rating subject 'physical attractiveness'","code":""},{"path":"https://friendly.github.io/heplots/reference/MockJury.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","text":"Dr. Wuensch's StatData Page, http://core.ecu.edu/psyc/wuenschk/StatData/PLASTER.dat","code":""},{"path":"https://friendly.github.io/heplots/reference/MockJury.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","text":"participants told person photo committed Crime, asked rate seriousness crime recommend prison sentence, Years. attractiveness \"defendant\" influence sentence perceived seriousness crime? attractiveness interact nature crime?","code":""},{"path":"https://friendly.github.io/heplots/reference/MockJury.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","text":"Data thesis Plaster, M. E. (1989). Inmates mock jurors: effects physical attractiveness upon juridic decisions. M.. thesis, Greenville, NC: East Carolina University.","code":""},{"path":"https://friendly.github.io/heplots/reference/MockJury.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Effects Of Physical Attractiveness Upon Mock Jury Decisions — MockJury","text":"","code":"# manipulation check: test ratings of the photos classified by Attractiveness jury.mod1 <- lm( cbind(phyattr, happy, independent, sophisticated) ~ Attr, data=MockJury) car::Anova(jury.mod1, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Attr 2 1.7672 48.156 4 109 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(jury.mod1, main=\"HE plot for manipulation check\") pairs(jury.mod1) if (require(candisc)) { jury.can <- candisc(jury.mod1) jury.can heplot(jury.can, main=\"Canonical HE plot\") } #> Vector scale factor set to 8.817675 # influence of Attr of photo and nature of crime on Serious and Years jury.mod2 <- lm( cbind(Serious, Years) ~ Attr * Crime, data=MockJury) car::Anova(jury.mod2, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Attr 2 0.075607 4.0828 2 108 0.01953 * #> Crime 1 0.004697 0.2513 2 107 0.77824 #> Attr:Crime 2 0.050104 2.7056 2 108 0.07136 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(jury.mod2) # stepdown test (ANCOVA), controlling for Serious jury.mod3 <- lm( Years ~ Serious + Attr * Crime, data=MockJury) car::Anova(jury.mod3) #> Anova Table (Type II tests) #> #> Response: Years #> Sum Sq Df F value Pr(>F) #> Serious 379.49 1 41.1423 3.938e-09 *** #> Attr 74.22 2 4.0230 0.02067 * #> Crime 3.92 1 0.4255 0.51563 #> Attr:Crime 49.30 2 2.6723 0.07370 . #> Residuals 986.95 107 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # need to consider heterogeneous slopes? jury.mod4 <- lm( Years ~ Serious * Attr * Crime, data=MockJury) car::Anova(jury.mod3, jury.mod4) #> Anova Table (Type II tests) #> #> Response: Years #> Sum Sq Df F value Pr(>F) #> Serious 379.49 1 42.9427 2.338e-09 *** #> Attr 74.22 2 4.1991 0.01768 * #> Crime 3.92 1 0.4441 0.50667 #> Attr:Crime 49.30 2 2.7892 0.06616 . #> Residuals 901.38 102 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"},{"path":"https://friendly.github.io/heplots/reference/NeuroCog.html","id":null,"dir":"Reference","previous_headings":"","what":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","title":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","text":"primary purpose study (Hartman, 2016, Heinrichs et al. (2015)) evaluate patterns levels performance neurocognitive measures among individuals schizophrenia schizoaffective disorder using well-validated, comprehensive neurocognitive battery specifically designed individuals psychosis (Heinrichs et al. (2008))","code":""},{"path":"https://friendly.github.io/heplots/reference/NeuroCog.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","text":"data frame 242 observations following 10 variables. Dx Diagnostic group, factor levels Schizophrenia Schizoaffective Control Speed Speed processing domain T score, numeric vector Attention Attention/Vigilance Domain T score, numeric vector Memory Working memory numeric vector Verbal Verbal Learning Domain T score, numeric vector Visual Visual Learning Domain T score, numeric vector ProbSolv Reasoning/Problem Solving Domain T score, numeric vector SocialCog Social Cognition Domain T score, numeric vector Age Subject age, numeric vector Sex Subject gender, factor levels Female Male","code":""},{"path":"https://friendly.github.io/heplots/reference/NeuroCog.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","text":"Hartman, L. . (2016). Schizophrenia Schizoaffective Disorder: One Condition Two? Unpublished PhD dissertation, York University. Heinrichs, R.W., Pinnock, F., Muharib, E., Hartman, L.., Goldberg, J.O., & McDermid Vaz, S. (2015). Neurocognitive normality schizophrenia revisited. Schizophrenia Research: Cognition, 2 (4), 227-232. doi: 10.1016/j.scog.2015.09.001","code":""},{"path":"https://friendly.github.io/heplots/reference/NeuroCog.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","text":"main interest determining well measures distinguished among groups whether variables distinguished schizophrenia schizoaffective groups. Neurocognitive function assessed using MATRICS Consensus Cognitive Battery (MCCB; Nuechterlein et al., 2008). MCCB consists 10 individually administered tests measure cognitive performance seven domains: speed processing, attention/vigilance, working memory, verbal learning, visual learning, reasoning problem solving, social cognition. clinical sample comprised 116 male female patients met following criteria: 1) diagnosis schizophrenia (n = 70) schizoaffective disorder (n = 46) confirmed Structured Clinical Interview DSM-IV-TR Axis Disorders; 2) outpatient status; 3) history free developmental learning disability; 4) age 18-65; 5) history free neurological endocrine disorder; 6) concurrent DSM-IV-TR diagnosis substance use disorder. Non-psychiatric control participants (n = 146) screened medical psychiatric illness history substance abuse. Patients recruited three outpatient clinics Hamilton, Ontario, Canada. Control participants recruited local newspaper online classified advertisements paid research participation.","code":""},{"path":"https://friendly.github.io/heplots/reference/NeuroCog.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","text":"Heinrichs, R. W., Ammari, N., McDermid Vaz, S. & Miles, . (2008). schizophrenia schizoaffective disorder neuropsychologically distinguishable? Schizophrenia Research, 99, 149-154. Nuechterlein K.H., Green M.F., Kern R.S., Baade L.E., Barch D., Cohen J., Essock S., Fenton W.S., Frese F.J., Gold J.M., Goldberg T., Heaton R., Keefe R.S.E., Kraemer H., Mesholam-Gately R., Seidman L.J., Stover E., Weinberger D.R., Young .S., Zalcman S., Marder S.R. (2008) MATRICS Consensus Cognitive Battery, Part 1: Test selection, reliability, validity. American Journal Psychiatry, 165 (2), 203-213. https://pubmed.ncbi.nlm.nih.gov/18172019/.","code":""},{"path":"https://friendly.github.io/heplots/reference/NeuroCog.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Neurocognitive Measures in Psychiatric Groups — NeuroCog","text":"","code":"library(car) data(NeuroCog) NC.mlm <- lm(cbind( Speed, Attention, Memory, Verbal, Visual, ProbSolv) ~ Dx, data=NeuroCog) Anova(NC.mlm) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Dx 2 0.2992 6.8902 12 470 1.562e-11 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test contrasts contrasts(NeuroCog$Dx) #> [,1] [,2] #> Schizophrenia -0.5 1 #> Schizoaffective -0.5 -1 #> Control 1.0 0 print(linearHypothesis(NC.mlm, \"Dx1\"), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.2890821 15.85866 6 234 2.8146e-15 *** #> Wilks 1 0.7109179 15.85866 6 234 2.8146e-15 *** #> Hotelling-Lawley 1 0.4066322 15.85866 6 234 2.8146e-15 *** #> Roy 1 0.4066322 15.85866 6 234 2.8146e-15 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 print(linearHypothesis(NC.mlm, \"Dx2\"), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.0063518 0.2493025 6 234 0.95924 #> Wilks 1 0.9936482 0.2493025 6 234 0.95924 #> Hotelling-Lawley 1 0.0063924 0.2493025 6 234 0.95924 #> Roy 1 0.0063924 0.2493025 6 234 0.95924 # pairwise HE plots pairs(NC.mlm, var.cex=1.5) # canonical discriminant analysis if (require(candisc)) { NC.can <- candisc(NC.mlm) NC.can plot(NC.can, ellipse=TRUE, rev.axes=c(TRUE,FALSE), pch=c(7,9,10)) } #> Vector scale factor set to 4.128"},{"path":"https://friendly.github.io/heplots/reference/NLSY.html","id":null,"dir":"Reference","previous_headings":"","what":"National Longitudinal Survey of Youth Data — NLSY","title":"National Longitudinal Survey of Youth Data — NLSY","text":"dataset come small random sample U.S. National Longitudinal Survey Youth.","code":""},{"path":"https://friendly.github.io/heplots/reference/NLSY.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"National Longitudinal Survey of Youth Data — NLSY","text":"data frame 243 observations following 6 variables. math Math achievement test score read Reading achievement test score antisoc score measure child's antisocial behavior, 0:6 hyperact score measure child's hyperactive behavior, 0:5 income yearly income child's father educ years education child's father","code":""},{"path":"https://friendly.github.io/heplots/reference/NLSY.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"National Longitudinal Survey of Youth Data — NLSY","text":"dataset derived larger one used Patrick Curran 1997 meeting Society Research Child Development (SRCD). description now exists WayBack Machine, http://web.archive.org/web/20050404145001/http://www.unc.edu/~curran/example.html. details available http://web.archive.org/web/20060830061414/http://www.unc.edu/~curran/srcd-docs/srcdmeth.pdf.","code":""},{"path":"https://friendly.github.io/heplots/reference/NLSY.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"National Longitudinal Survey of Youth Data — NLSY","text":"dataset, math read scores taken outcome variables. Among remaining predictors, income educ might considered background variables necessary control . Interest might focused whether behavioural variables antisoc hyperact contribute beyond .","code":""},{"path":"https://friendly.github.io/heplots/reference/NLSY.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"National Longitudinal Survey of Youth Data — NLSY","text":"","code":"library(car) data(NLSY) #examine the data scatterplotMatrix(NLSY, smooth=FALSE) # test control variables by themselves # ------------------------------------- mod1 <- lm(cbind(read,math) ~ income+educ, data=NLSY) Anova(mod1) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> income 1 0.034469 4.2661 2 239 0.015121 * #> educ 1 0.051521 6.4912 2 239 0.001798 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(mod1, fill=TRUE) # test of overall regression coefs <- rownames(coef(mod1))[-1] linearHypothesis(mod1, coefs) #> #> Sum of squares and products for the hypothesis: #> read math #> read 859.6586 1474.716 #> math 1474.7164 2929.558 #> #> Sum of squares and products for error: #> read math #> read 22882.46 12051.69 #> math 12051.69 23763.79 #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 0.1166962 7.435629 4 480 8.1261e-06 *** #> Wilks 2 0.8840660 7.594147 4 478 6.1527e-06 *** #> Hotelling-Lawley 2 0.1302750 7.751361 4 476 4.6699e-06 *** #> Roy 2 0.1232808 14.793699 2 240 8.7377e-07 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(mod1, fill=TRUE, hypotheses=list(\"Overall\"=coefs)) # additional contribution of antisoc + hyperact over income + educ # ---------------------------------------------------------------- mod2 <- lm(cbind(read,math) ~ antisoc + hyperact + income + educ, data=NLSY) Anova(mod2) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> antisoc 1 0.019343 2.3374 2 237 0.098803 . #> hyperact 1 0.014442 1.7364 2 237 0.178380 #> income 1 0.038280 4.7167 2 237 0.009801 ** #> educ 1 0.053152 6.6521 2 237 0.001546 ** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 coefs <- rownames(coef(mod2))[-1] heplot(mod2, fill=TRUE, hypotheses=list(\"Overall\"=coefs, \"mod2|mod1\"=coefs[1:2])) linearHypothesis(mod2, coefs[1:2]) #> #> Sum of squares and products for the hypothesis: #> read math #> read 170.3478 261.2230 #> math 261.2230 516.0188 #> #> Sum of squares and products for error: #> read math #> read 22712.12 11790.46 #> math 11790.46 23247.77 #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 0.0239869 1.444548 4 476 0.218172 #> Wilks 2 0.9760624 1.444284 4 474 0.218264 #> Hotelling-Lawley 2 0.0244741 1.443972 4 472 0.218372 #> Roy 2 0.0221965 2.641385 2 238 0.073351 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(mod2, fill=TRUE, hypotheses=list(\"mod2|mod1\"=coefs[1:2]))"},{"path":"https://friendly.github.io/heplots/reference/Oslo.html","id":null,"dir":"Reference","previous_headings":"","what":"Oslo Transect Subset Data — Oslo","title":"Oslo Transect Subset Data — Oslo","text":"Oslo data set contains chemical concentrations 332 samples different plant species collected along 120 km transect running city Oslo, Norway. subset OsloTransect data provided rrcov package.","code":""},{"path":"https://friendly.github.io/heplots/reference/Oslo.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Oslo Transect Subset Data — Oslo","text":"data frame 332 observations following 14 variables. site transect site ID, factor levels 102 103 104 105 106 107 108 109 111 112 113 114 115 116 117 118 119 121 122 123 124 125 126 127 128 129 131 132 133 134 135 136 138 139 141 142 143 144 XC X coordinate, numeric vector YC Y coordinate, numeric vector forest forest type, factor levels birspr mixdec pine sprbir sprpin spruce weather weather type, factor levels cloud moist nice rain litho lithological type, factor levels camsed (Cambro-Silurian sedimentary), gneis_o (Precambrian gneisses - Oslo), gneis_r (- Randsfjord), magm (Magmatic rocks) altitude altitude, numeric vector Cu Copper, numeric vector Fe Iron, numeric vector K Potassium, numeric vector Mg Magnesium, numeric vector Mn Manganese, numeric vector P Lead, numeric vector Zn Zinc, numeric vector","code":""},{"path":"https://friendly.github.io/heplots/reference/Oslo.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Oslo Transect Subset Data — Oslo","text":"Reimann, C., Arnoldussen, ., Boyd, R., Finne, T.E., Koller, F., Nordgulen, Oe., Englmaier, P. (2007) Element contents leaves four plant species (birch, mountain ash, fern spruce) along anthropogenic geogenic concentration gradients, Science Total Environment, 377, 416-433.","code":""},{"path":"https://friendly.github.io/heplots/reference/Oslo.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Oslo Transect Subset Data — Oslo","text":"OsloTransect contains 360 observations, 9 observations per site. 7 chemical elements retained 25 contained OsloTransect data, log-transformed, following Todorov Filzmoser (2009). complete cases variables retained, two lithological types low frequency removed, leaving 332 observations.","code":""},{"path":"https://friendly.github.io/heplots/reference/Oslo.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Oslo Transect Subset Data — Oslo","text":"Todorov V. Filzmoser P. (2009) Robust statistic one-way MANOVA, submitted Journal Environmetrics.","code":""},{"path":"https://friendly.github.io/heplots/reference/Oslo.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Oslo Transect Subset Data — Oslo","text":"","code":"data(Oslo) table(Oslo$litho) #> #> camsed gneis_o gneis_r magm #> 98 89 32 113 Oslo.mod <- lm(cbind(Cu, K, Mg, Mn, P, Zn) ~ litho, data=Oslo) car::Anova(Oslo.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> litho 3 0.24655 4.8503 18 975 1.503e-10 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(Oslo.mod, var=c(\"Cu\", \"Mn\")) pairs(Oslo.mod) if (FALSE) { if(require(candisc)) { Oslo.can <- candisc(Oslo.mod) Oslo.can heplot(Oslo.can) if(requireNamespace(\"rgl\")){ heplot3d(Oslo.can, shade=TRUE, wire=FALSE, alpha=0.5, var.col=\"red\") } } }"},{"path":"https://friendly.github.io/heplots/reference/pairs.mlm.html","id":null,"dir":"Reference","previous_headings":"","what":"Pairwise HE Plots — pairs.mlm","title":"Pairwise HE Plots — pairs.mlm","text":"function (form mlm method generic pairs function) constructs ``matrix'' pairwise plots (see heplot) multivariate linear model.","code":""},{"path":"https://friendly.github.io/heplots/reference/pairs.mlm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pairwise HE Plots — pairs.mlm","text":"","code":"# S3 method for mlm pairs( x, variables, var.labels, var.cex = 2, type = c(\"II\", \"III\", \"2\", \"3\"), idata = NULL, idesign = NULL, icontrasts = NULL, imatrix = NULL, iterm = NULL, manova, offset.axes = 0.05, digits = getOption(\"digits\") - 1, fill = FALSE, fill.alpha = 0.3, ... )"},{"path":"https://friendly.github.io/heplots/reference/pairs.mlm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Pairwise HE Plots — pairs.mlm","text":"x object class mlm. variables indices names three response variables plotted; defaults responses. var.labels labels variables plotted diagonal panels; defaults names response variables. var.cex character expansion variable labels. type type sum--squares--products matrices compute; one \"II\", \"III\", \"2\", \"3\", \"II\" default (\"2\" synonym). idata optional data frame giving factor factors defining intra-subject model multivariate repeated-measures data. See Details Anova explanation intra-subject design explanation arguments relating intra-subject factors. idesign one-sided model formula using ``data'' idata specifying intra-subject design repeated measure models. icontrasts names contrast-generating functions applied default factors ordered factors, respectively, within-subject ``data''; contrasts must produce intra-subject model matrix different terms orthogonal. default c(\"contr.sum\", \"contr.poly\"). imatrix lieu idata idesign, can specify intra-subject design matrix directly via imatrix, form list named elements. element gives columns within-subject model matrix intra-subject term tested, must many rows responses; columns within-subject model matrix different terms must mutually orthogonal. iterm repeated measures designs, must specify one intra-subject term (character string) select SSPE (E) matrix used plot. Hypothesis terms plotted include iterm effect well interactions iterm terms. manova optional Anova.mlm object model; absent MANOVA computed. Specifying argument can therefore save computation repeated calls. offset.axes proportion extend axes direction; defaults 0.05. digits number significant digits axis end-labels; taken \"digits\" option. fill logical vector indicating whether ellipse filled . first value used error ellipse, rest --- possibly recycled --- hypothesis ellipses; single fill value can given. Defaults FALSE backward compatibility. See Details heplot fill.alpha Alpha transparency filled ellipses, numeric scalar vector values within [0,1], 0 means fully transparent 1 means fully opaque. Defaults 0.3. ... arguments pass heplot, used draw panel display.","code":""},{"path":"https://friendly.github.io/heplots/reference/pairs.mlm.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Pairwise HE Plots — pairs.mlm","text":"Friendly, M. (2006). Data Ellipses, Plots Reduced-Rank Displays Multivariate Linear Models: SAS Software Examples Journal Statistical Software, 17(6), 1-42. https://www.jstatsoft.org/v17/i06/ Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421-444. http://datavis.ca/papers/jcgs-heplots.pdf","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/pairs.mlm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Pairwise HE Plots — pairs.mlm","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/pairs.mlm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Pairwise HE Plots — pairs.mlm","text":"","code":"# ANCOVA, assuming equal slopes rohwer.mod <- lm(cbind(SAT, PPVT, Raven) ~ SES + n + s + ns + na + ss, data=Rohwer) # View all pairs, with ellipse for all 5 regressors pairs(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\")))"},{"path":"https://friendly.github.io/heplots/reference/Parenting.html","id":null,"dir":"Reference","previous_headings":"","what":"Father Parenting Competence — Parenting","title":"Father Parenting Competence — Parenting","text":"data, exercise given Meyers et al. (2006) relates 60 fathers assessed three subscales Perceived Parenting Competence Scale. fathers selected three groups: () fathers child disabilities; (b) fathers physically disabled child; (c) fathers mentally disabled child.","code":""},{"path":"https://friendly.github.io/heplots/reference/Parenting.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Father Parenting Competence — Parenting","text":"data frame 60 observations following 4 variables. group factor levels Normal Physical Disability Mental Disability caring caretaking responsibilities, numeric vector emotion emotional support provided child, numeric vector play recreational time spent child, numeric vector","code":""},{"path":"https://friendly.github.io/heplots/reference/Parenting.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Father Parenting Competence — Parenting","text":"Meyers, L. S., Gamst, G, & Guarino, . J. (2006). Applied Multivariate Research: Design Interpretation, Thousand Oaks, CA: Sage Publications, https://studysites.sagepub.com/amrStudy/, Exercises 10B.","code":""},{"path":"https://friendly.github.io/heplots/reference/Parenting.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Father Parenting Competence — Parenting","text":"scores response variables discrete.","code":""},{"path":"https://friendly.github.io/heplots/reference/Parenting.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Father Parenting Competence — Parenting","text":"","code":"data(Parenting) require(car) # fit the MLM parenting.mod <- lm(cbind(caring, emotion, play) ~ group, data=Parenting) car::Anova(parenting.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> group 2 0.94836 16.833 6 112 8.994e-14 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # Box's M test boxM(parenting.mod) #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: Y #> Chi-Sq (approx.) = 28.343, df = 12, p-value = 0.004927 #> plot(boxM(parenting.mod)) parenting.mod <- lm(cbind(caring, emotion, play) ~ group, data=Parenting) car::Anova(parenting.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> group 2 0.94836 16.833 6 112 8.994e-14 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test contrasts print(linearHypothesis(parenting.mod, \"group1\"), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.5210364 19.94376 3 55 7.1051e-09 *** #> Wilks 1 0.4789636 19.94376 3 55 7.1051e-09 *** #> Hotelling-Lawley 1 1.0878413 19.94376 3 55 7.1051e-09 *** #> Roy 1 1.0878413 19.94376 3 55 7.1051e-09 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 print(linearHypothesis(parenting.mod, \"group2\"), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.4293815 13.79555 3 55 8.0113e-07 *** #> Wilks 1 0.5706185 13.79555 3 55 8.0113e-07 *** #> Hotelling-Lawley 1 0.7524844 13.79555 3 55 8.0113e-07 *** #> Roy 1 0.7524844 13.79555 3 55 8.0113e-07 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(parenting.mod) # display tests of contrasts hyp <- list(\"N:MP\" = \"group1\", \"M:P\" = \"group2\") heplot(parenting.mod, hypotheses=hyp) # make a prettier plot heplot(parenting.mod, hypotheses=hyp, asp=1, fill=TRUE, fill.alpha=c(0.3,0.1), col=c(\"red\", \"blue\"), lty=c(0,0,1,1), label.pos=c(1,1,3,2), cex=1.4, cex.lab=1.4, lwd=3) pairs(parenting.mod, fill=TRUE, fill.alpha=c(0.3, 0.1)) if (FALSE) { heplot3d(parenting.mod, wire=FALSE) }"},{"path":"https://friendly.github.io/heplots/reference/peng.html","id":null,"dir":"Reference","previous_headings":"","what":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","title":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","text":"Data originally palmerpenguins. Includes measurements penguin species, island Palmer Archipelago, size (flipper length, body mass, bill dimensions), sex.","code":""},{"path":"https://friendly.github.io/heplots/reference/peng.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","text":"","code":"peng"},{"path":"https://friendly.github.io/heplots/reference/peng.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","text":"tibble 333 rows 8 variables: species factor denoting penguin species (\"Adélie\", \"Chinstrap\" \"Gentoo\") island factor denoting island Palmer Archipelago, Antarctica (\"Biscoe\", \"Dream\" \"Torgersen\") bill_length number denoting bill length (millimeters) bill_depth number denoting bill depth (millimeters) flipper_length integer denoting flipper length (millimeters) body_mass integer denoting body mass (grams) sex factor denoting penguin sex (\"f\", \"m\") year integer denoting study year (2007, 2008, 2009)","code":""},{"path":"https://friendly.github.io/heplots/reference/peng.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","text":"Adélie penguins: Palmer Station Antarctica LTER K. Gorman. 2020. Structural size measurements isotopic signatures foraging among adult male female Adélie penguins (Pygoscelis adeliae) nesting along Palmer Archipelago near Palmer Station, 2007-2009 ver 5. Environmental Data Initiative doi:10.6073/pasta/98b16d7d563f265cb52372c8ca99e60f Gentoo penguins: Palmer Station Antarctica LTER K. Gorman. 2020. Structural size measurements isotopic signatures foraging among adult male female Gentoo penguin (Pygoscelis papua) nesting along Palmer Archipelago near Palmer Station, 2007-2009 ver 5. Environmental Data Initiative doi:10.6073/pasta/7fca67fb28d56ee2ffa3d9370ebda689 Chinstrap penguins: Palmer Station Antarctica LTER K. Gorman. 2020. Structural size measurements isotopic signatures foraging among adult male female Chinstrap penguin (Pygoscelis antarcticus) nesting along Palmer Archipelago near Palmer Station, 2007-2009 ver 6. Environmental Data Initiative doi:10.6073/pasta/c14dfcfada8ea13a17536e73eb6fbe9e Originally published : Gorman KB, Williams TD, Fraser WR (2014) Ecological Sexual Dimorphism Environmental Variability within Community Antarctic Penguins (Genus Pygoscelis). PLoS ONE 9(3): e90081. doi:10.1371/journal.pone.0090081","code":""},{"path":"https://friendly.github.io/heplots/reference/peng.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","text":"version, variable names shortened (removing units) observations missing data removed.","code":""},{"path":"https://friendly.github.io/heplots/reference/peng.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Size measurements for adult foraging penguins near Palmer Station, Antarctica — peng","text":"","code":"data(peng) # Covariance ellipses, centered, first two variables covEllipses(cbind(bill_length, bill_depth) ~ species, data=peng, center=TRUE, fill=c(rep(FALSE,3), TRUE), fill.alpha=.1, label.pos=c(1:3,0)) # All pairs when more than two variables are specified. They look pretty similar covEllipses(peng[,3:6], peng$species, variables=1:4, fill=c(rep(FALSE,3), TRUE), fill.alpha=.1) # Box's M test peng.boxm <- boxM(cbind(bill_length, bill_depth, flipper_length, body_mass) ~ species, data=peng) peng.boxm #> #> \tBox's M-test for Homogeneity of Covariance Matrices #> #> data: Y #> Chi-Sq (approx.) = 74.731, df = 20, p-value = 3.02e-08 #> plot(peng.boxm, gplabel=\"Species\") # Fit MANOVA model, predicting species peng.mod0 <-lm(cbind(bill_length, bill_depth, flipper_length, body_mass) ~ species, data=peng) car::Anova(peng.mod0) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> species 2 1.6379 370.89 8 656 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # HE plot heplot(peng.mod0, fill=TRUE, fill.alpha=0.1, size=\"effect\", xlim=c(35,52), ylim=c(14,20))"},{"path":"https://friendly.github.io/heplots/reference/Plastic.html","id":null,"dir":"Reference","previous_headings":"","what":"Plastic Film Data — Plastic","title":"Plastic Film Data — Plastic","text":"experiment conducted determine optimum conditions extruding plastic film. Three responses measured relation two factors, rate extrusion amount additive.","code":""},{"path":"https://friendly.github.io/heplots/reference/Plastic.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Plastic Film Data — Plastic","text":"data frame 20 observations following 5 variables. tear numeric vector: tear resistance gloss numeric vector: film gloss opacity numeric vector: film opacity rate factor representing change rate extrusion levels Low (-10%), High (10%) additive factor levels Low (1.0%), High (1.5%)","code":""},{"path":"https://friendly.github.io/heplots/reference/Plastic.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Plastic Film Data — Plastic","text":"Johnson, R.. & Wichern, D.W. (1992). Applied Multivariate Statistical Analysis, 3rd ed., Prentice-Hall. Example 6.12 (p. 266).","code":""},{"path":"https://friendly.github.io/heplots/reference/Plastic.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plastic Film Data — Plastic","text":"Krzanowski, W. J. (1988). Principles Multivariate Analysis. User's Perspective. Oxford. (p. 381)","code":""},{"path":"https://friendly.github.io/heplots/reference/Plastic.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plastic Film Data — Plastic","text":"","code":"str(Plastic) #> 'data.frame':\t20 obs. of 5 variables: #> $ tear : num 6.5 6.2 5.8 6.5 6.5 6.9 7.2 6.9 6.1 6.3 ... #> $ gloss : num 9.5 9.9 9.6 9.6 9.2 9.1 10 9.9 9.5 9.4 ... #> $ opacity : num 4.4 6.4 3 4.1 0.8 5.7 2 3.9 1.9 5.7 ... #> $ rate : Factor w/ 2 levels \"Low\",\"High\": 1 1 1 1 1 1 1 1 1 1 ... #> $ additive: Factor w/ 2 levels \"Low\",\"High\": 1 1 1 1 1 2 2 2 2 2 ... plastic.mod <- lm(cbind(tear, gloss, opacity) ~ rate*additive, data=Plastic) car::Anova(plastic.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> rate 1 0.61814 7.5543 3 14 0.003034 ** #> additive 1 0.47697 4.2556 3 14 0.024745 * #> rate:additive 1 0.22289 1.3385 3 14 0.301782 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 pairs(plastic.mod)"},{"path":"https://friendly.github.io/heplots/reference/plot.boxM.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot for Box's M test and generalizations — plot.boxM","title":"Plot for Box's M test and generalizations — plot.boxM","text":"function creates simple dot chart showing contributions (log determinants) various groups Box's M test equality covariance matrices. important virtue plots can show groups differ , pooled covariance matrix using scalar like \\(ln | S |\\). way, can suggest specific questions hypotheses regarding equality covariance matrices, analogous use contrasts linear hypotheses testing differences among group mean vectors. Box's M test based specific function (log determinant) covariance matrices groups compared pooled covariance matrix, function also also allow plots measures based eigenvalues covariance matrices. Confidence intervals available default Box M test, using =\"logDet\".","code":""},{"path":"https://friendly.github.io/heplots/reference/plot.boxM.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot for Box's M test and generalizations — plot.boxM","text":"","code":"# S3 method for boxM plot( x, gplabel = NULL, which = c(\"logDet\", \"product\", \"sum\", \"precision\", \"max\"), log = which == \"product\", pch = c(16, 15), cex = c(2, 2.5), col = c(\"blue\", \"red\"), rev = FALSE, xlim, conf = 0.95, method = 1, bias.adj = TRUE, lwd = 2, ... )"},{"path":"https://friendly.github.io/heplots/reference/plot.boxM.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot for Box's M test and generalizations — plot.boxM","text":"x \"boxM\" object resulting boxM gplabel character string used label group factor. Measure plotted. default, \"logDet\", standard plot. values : \"product\", \"sum\", \"precision\" \"max\" log logical; TRUE, log measure plotted. default, ==\"product\", produces plot equivalent plot \"logDet\". pch vector two point symbols use individual groups pooled data, respectively cex character size point symbols, vector length two groups pooled data, respectively col colors point symbols, vector length two groups pooled data rev logical; TRUE, order groups reversed vertical axis. xlim x limits plot conf coverage approximate confidence intervals, 0 <= conf < 1 ; use conf=0 suppress method confidence interval method; see logdetCI bias.adj confidence interval bias adjustment; see logdetCI lwd line width confidence interval ... Arguments passed dotchart.","code":""},{"path":"https://friendly.github.io/heplots/reference/plot.boxM.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot for Box's M test and generalizations — plot.boxM","text":"Friendly, M., & Sigal, M. (2018). Visualizing Tests Equality Covariance Matrices. American Statistician, 72(4); doi:10.1080/00031305.2018.1497537 . Online: https://www.datavis.ca/papers/EqCov-TAS.pdf.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/plot.boxM.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot for Box's M test and generalizations — plot.boxM","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/plot.boxM.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot for Box's M test and generalizations — plot.boxM","text":"","code":"# Iris data res <- boxM(iris[, 1:4], iris[, \"Species\"]) plot(res, gplabel=\"Species\") # Skulls data skulls.mod <- lm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) skulls.boxm <- boxM(skulls.mod) plot(skulls.boxm, gplabel=\"Epoch\") plot(skulls.boxm, gplabel=\"Epoch\", bias.adj=FALSE) # other measures plot(skulls.boxm, which=\"product\", gplabel=\"Epoch\", xlim=c(10,14)) plot(skulls.boxm, which=\"sum\", gplabel=\"Epoch\") plot(skulls.boxm, which=\"precision\", gplabel=\"Epoch\") plot(skulls.boxm, which=\"max\", gplabel=\"Epoch\")"},{"path":"https://friendly.github.io/heplots/reference/plot.robmlm.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot observation weights from a robust multivariate linear models — plot.robmlm","title":"Plot observation weights from a robust multivariate linear models — plot.robmlm","text":"Creates index plot observation weights assigned last iteration robmlm. Observations low weights large residual squared distances potential multivariate outliers respect fitted model.","code":""},{"path":"https://friendly.github.io/heplots/reference/plot.robmlm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot observation weights from a robust multivariate linear models — plot.robmlm","text":"","code":"# S3 method for robmlm plot( x, labels, id.weight = 0.7, id.pos = 4, pch = 19, col = palette()[1], cex = par(\"cex\"), segments = FALSE, xlab = \"Case index\", ylab = \"Weight in robust MANOVA\", ... )"},{"path":"https://friendly.github.io/heplots/reference/plot.robmlm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot observation weights from a robust multivariate linear models — plot.robmlm","text":"x \"robmlm\" object labels Observation labels; specified, uses rownames original data id.weight Threshold identifying observations small weights id.pos Position observation label relative point pch Point symbol(s); can vector length equal number observations data frame col Point color(s) cex Point character size(s) segments logical; TRUE, draw line segments 1.o point xlab x axis label ylab y axis label ... arguments passed plot","code":""},{"path":"https://friendly.github.io/heplots/reference/plot.robmlm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot observation weights from a robust multivariate linear models — plot.robmlm","text":"Returns invisibly weights observations labeled plot","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/plot.robmlm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot observation weights from a robust multivariate linear models — plot.robmlm","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/plot.robmlm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot observation weights from a robust multivariate linear models — plot.robmlm","text":"","code":"data(Skulls) sk.rmod <- robmlm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) plot(sk.rmod, col=Skulls$epoch) axis(side=3, at=15+seq(0,120,30), labels=levels(Skulls$epoch), cex.axis=1) # Pottery data data(Pottery, package = \"carData\") pottery.rmod <- robmlm(cbind(Al,Fe,Mg,Ca,Na)~Site, data=Pottery) plot(pottery.rmod, col=Pottery$Site, segments=TRUE) # SocialCog data data(SocialCog) SC.rmod <- robmlm(cbind( MgeEmotions, ToM, ExtBias, PersBias) ~ Dx, data=SocialCog) plot(SC.rmod, col=SocialCog$Dx, segments=TRUE)"},{"path":"https://friendly.github.io/heplots/reference/Pottery2.html","id":null,"dir":"Reference","previous_headings":"","what":"Chemical Analysis of Romano-British Pottery — Pottery2","title":"Chemical Analysis of Romano-British Pottery — Pottery2","text":"Results chemical analyses 48 specimens Romano-British pottery published Tubb et al. (1980). numbers percentage various metal oxides found sample elements concentrations greater 0.01%. original data set Tubb et al. (1980), contrast Pottery.","code":""},{"path":"https://friendly.github.io/heplots/reference/Pottery2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Chemical Analysis of Romano-British Pottery — Pottery2","text":"data frame 48 observations following 12 variables. Region factor levels Gl NF Wales Site factor levels AshleyRails Caldicot Gloucester IsleThorns Llanedryn Kiln factor levels 1 2 3 4 5 Al amount aluminum oxide, \\(Al_2O_3\\) Fe amount iron oxide, \\(Fe_2O_3\\) Mg amount magnesium oxide, MgO Ca amount calcium oxide, CaO Na amount sodium oxide, \\(Na_2O\\) K amount potassium oxide, \\(K_2O\\) Ti amount titanium oxide, \\(TiO_2\\) Mn amount manganese oxide, MnO Ba amount BaO","code":""},{"path":"https://friendly.github.io/heplots/reference/Pottery2.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Chemical Analysis of Romano-British Pottery — Pottery2","text":"Originally slightly modified files David Carlson, now RBPottery.","code":""},{"path":"https://friendly.github.io/heplots/reference/Pottery2.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Chemical Analysis of Romano-British Pottery — Pottery2","text":"specimens identified rownames data frame. Kiln indicates kiln site pottery found; Site gives location names sites. kiln sites come three Regions, (\"Gl\"=1, \"Wales\"=(2, 3), \"NF\"=(4, 5)), full names \"Gloucester\", \"Wales\", \"New Forrest\". variable Kiln comes pre-supplied contrasts test interesting hypotheses related Site Region.","code":""},{"path":"https://friendly.github.io/heplots/reference/Pottery2.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Chemical Analysis of Romano-British Pottery — Pottery2","text":"Baxter, M. J. 2003. Statistics Archaeology. Arnold, London. Carlson, David L. 2017. Quantitative Methods Archaeology Using R. Cambridge University Press, pp 247-255, 335-342. Tubb, ., . J. Parker, G. Nickless. 1980. Analysis Romano-British Pottery Atomic Absorption Spectrophotometry. Archaeometry, 22, 153-171.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/Pottery2.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Chemical Analysis of Romano-British Pottery — Pottery2","text":"","code":"library(car) data(Pottery2) # contrasts for Kiln correspond to between Region [,1:2] and within Region [,3:4] contrasts(Pottery2$Kiln) #> G.WN W.N W2.W3 NF4.NF5 #> 1 4 0 0 0 #> 2 -1 1 1 0 #> 3 -1 1 -1 0 #> 4 -1 -1 0 1 #> 5 -1 -1 0 -1 pmod <-lm(cbind(Al,Fe,Mg,Ca,Na,K,Ti,Mn,Ba)~Kiln, data=Pottery2) car::Anova(pmod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Kiln 4 2.2268 5.3025 36 152 1.391e-13 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # extract coefficient names for linearHypotheses coefs <- rownames(coef(pmod))[-1] # test differences among regions linearHypothesis(pmod, coefs[1:2]) #> #> Sum of squares and products for the hypothesis: #> Al Fe Mg Ca Na K #> Al 151.65057276 -40.53893273 -90.32962804 6.93651249 1.398166750 -49.20000025 #> Fe -40.53893273 233.23920836 52.50699833 35.47123205 11.719323014 45.78071096 #> Mg -90.32962804 52.50699833 57.42066307 0.62797642 0.709273843 33.46637847 #> Ca 6.93651249 35.47123205 0.62797642 6.58156100 2.093516673 3.22560998 #> Na 1.39816675 11.71932301 0.70927384 2.09351667 0.670448844 1.32056847 #> K -49.20000025 45.78071096 33.46637847 3.22560998 1.320568467 20.74890960 #> Ti 9.24314119 -5.42115551 -5.88182924 -0.07236204 -0.075203080 -3.43159076 #> Mn -2.43619545 2.85554855 1.73219182 0.25851436 0.097397909 1.11376927 #> Ba 0.03092721 0.04339183 -0.01183411 0.01008451 0.003094097 -0.00245479 #> Ti Mn Ba #> Al 9.243141192 -2.436195e+00 3.092721e-02 #> Fe -5.421155511 2.855549e+00 4.339183e-02 #> Mg -5.881829237 1.732192e+00 -1.183411e-02 #> Ca -0.072362038 2.585144e-01 1.008451e-02 #> Na -0.075203080 9.739791e-02 3.094097e-03 #> K -3.431590759 1.113769e+00 -2.454790e-03 #> Ti 0.602509224 -1.777282e-01 1.199732e-03 #> Mn -0.177728182 6.098404e-02 1.518182e-05 #> Ba 0.001199732 1.518182e-05 1.830653e-05 #> #> Sum of squares and products for error: #> Al Fe Mg Ca Na K #> Al 96.20132468 21.11225325 5.506287013 -2.096574026 0.569593506 10.55401948 #> Fe 21.11225325 19.88942753 2.157729870 -0.685039740 0.918994935 4.50978519 #> Mg 5.50628701 2.15772987 16.303520519 0.274558961 0.090970260 5.88807922 #> Ca -2.09657403 -0.68503974 0.274558961 1.760672078 -0.025830519 0.24870156 #> Na 0.56959351 0.91899494 0.090970260 -0.025830519 0.735820130 0.56027961 #> K 10.55401948 4.50978519 5.888079221 0.248701558 0.560279610 14.63247117 #> Ti 0.96768701 1.99152987 0.041040519 -0.120881039 0.062710260 0.32167922 #> Mn 0.37119545 0.26490145 -0.131911818 0.009635636 0.059562091 0.10489073 #> Ba 0.07495727 0.02567727 -0.007025091 0.004785182 0.004963455 0.01005364 #> Ti Mn Ba #> Al 0.967687013 0.371195455 0.0749572727 #> Fe 1.991529870 0.264901455 0.0256772727 #> Mg 0.041040519 -0.131911818 -0.0070250909 #> Ca -0.120881039 0.009635636 0.0047851818 #> Na 0.062710260 0.059562091 0.0049634545 #> K 0.321679221 0.104890727 0.0100536364 #> Ti 1.368520519 0.015238182 0.0037669091 #> Mn 0.015238182 0.089093964 0.0030718182 #> Ba 0.003766909 0.003071818 0.0004249909 #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 1.86181 53.88966 18 72 < 2.22e-16 *** #> Wilks 2 0.00383 58.97836 18 70 < 2.22e-16 *** #> Hotelling-Lawley 2 34.11493 64.43932 18 68 < 2.22e-16 *** #> Roy 2 25.10339 100.41357 9 36 < 2.22e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test differences within regions B, C linearHypothesis(pmod, coefs[3:4]) #> #> Sum of squares and products for the hypothesis: #> Al Fe Mg Ca Na K #> Al 3.1562321 1.8776786 1.6154857 -0.19634643 0.31648036 -0.74230357 #> Fe 1.8776786 1.7032143 1.6611429 -0.16853571 0.33919643 -1.02896429 #> Mg 1.6154857 1.6611429 1.6629886 -0.16227714 0.34223429 -1.08144286 #> Ca -0.1963464 -0.1685357 -0.1622771 0.01677929 -0.03300607 0.09801071 #> Na 0.3164804 0.3391964 0.3422343 -0.03300607 0.07059089 -0.22565893 #> K -0.7423036 -1.0289643 -1.0814429 0.09801071 -0.22565893 0.76313929 #> Ti 0.3105857 0.2461429 0.2322686 -0.02473714 0.04694429 -0.13454286 #> Mn 0.0667875 0.0777250 0.0795600 -0.00750750 0.01647875 -0.05377750 #> Ba 0.0062575 0.0054250 0.0052360 -0.00053950 0.00106575 -0.00317750 #> Ti Mn Ba #> Al 0.31058571 0.06678750 0.00625750 #> Fe 0.24614286 0.07772500 0.00542500 #> Mg 0.23226857 0.07956000 0.00523600 #> Ca -0.02473714 -0.00750750 -0.00053950 #> Na 0.04694429 0.01647875 0.00106575 #> K -0.13454286 -0.05377750 -0.00317750 #> Ti 0.03698857 0.01055000 0.00079400 #> Mn 0.01055000 0.00387575 0.00024275 #> Ba 0.00079400 0.00024275 0.00001735 #> #> Sum of squares and products for error: #> Al Fe Mg Ca Na K #> Al 96.20132468 21.11225325 5.506287013 -2.096574026 0.569593506 10.55401948 #> Fe 21.11225325 19.88942753 2.157729870 -0.685039740 0.918994935 4.50978519 #> Mg 5.50628701 2.15772987 16.303520519 0.274558961 0.090970260 5.88807922 #> Ca -2.09657403 -0.68503974 0.274558961 1.760672078 -0.025830519 0.24870156 #> Na 0.56959351 0.91899494 0.090970260 -0.025830519 0.735820130 0.56027961 #> K 10.55401948 4.50978519 5.888079221 0.248701558 0.560279610 14.63247117 #> Ti 0.96768701 1.99152987 0.041040519 -0.120881039 0.062710260 0.32167922 #> Mn 0.37119545 0.26490145 -0.131911818 0.009635636 0.059562091 0.10489073 #> Ba 0.07495727 0.02567727 -0.007025091 0.004785182 0.004963455 0.01005364 #> Ti Mn Ba #> Al 0.967687013 0.371195455 0.0749572727 #> Fe 1.991529870 0.264901455 0.0256772727 #> Mg 0.041040519 -0.131911818 -0.0070250909 #> Ca -0.120881039 0.009635636 0.0047851818 #> Na 0.062710260 0.059562091 0.0049634545 #> K 0.321679221 0.104890727 0.0100536364 #> Ti 1.368520519 0.015238182 0.0037669091 #> Mn 0.015238182 0.089093964 0.0030718182 #> Ba 0.003766909 0.003071818 0.0004249909 #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 0.3584150 0.8733388 18 72 0.610701 #> Wilks 2 0.6493732 0.9370114 18 70 0.538962 #> Hotelling-Lawley 2 0.5279530 0.9972445 18 68 0.473824 #> Roy 2 0.5041642 2.0166569 9 36 0.065976 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(pmod, fill=c(TRUE,FALSE), hypotheses=list(\"Region\" =coefs[1:2], \"WithinBC\"=coefs[3:4])) # all pairwise views; note that Ba shows no effect pairs(pmod, fill=c(TRUE,FALSE)) # canonical view, via candisc::heplot if (require(candisc)) { # canonical analysis: how many dimensions? (pcan <- candisc(pmod)) heplot(pcan, scale=18, fill=c(TRUE,FALSE), var.col=\"darkgreen\", var.lwd=2, var.cex=1.5) if (FALSE) { heplot3d(pcan, scale=8) } }"},{"path":"https://friendly.github.io/heplots/reference/Probe.html","id":null,"dir":"Reference","previous_headings":"","what":"Response Speed in a Probe Experiment — Probe","title":"Response Speed in a Probe Experiment — Probe","text":"Data probe experiment testing whether immediate memory sentences influenced phrase structure sentence. data sets come Timm (1975), Ex. 3.14 Ex. 3.16 (p.244)","code":""},{"path":"https://friendly.github.io/heplots/reference/Probe.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Response Speed in a Probe Experiment — Probe","text":"Probe1: data frame 11 observations following 5 variables. p1 speed position 1 p2 speed position 2 p3 speed position 3 p4 speed position 4 p5 speed position 5 Probe2: data frame 20 observations following 6 variables. stm Short term memory capacity: factor levels High Low p1 speed position 1 p2 speed position 2 p3 speed position 3 p4 speed position 4 p5 speed position 5","code":""},{"path":"https://friendly.github.io/heplots/reference/Probe.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Response Speed in a Probe Experiment — Probe","text":"Timm, N. (1975) Multivariate analysis, applications education psychology Brooks/Cole.","code":""},{"path":"https://friendly.github.io/heplots/reference/Probe.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Response Speed in a Probe Experiment — Probe","text":"Procedure: Subjects listened tape-recorded sentences. sentence followed \"probe word\" one 5 positions within sentence. subject respond word immediately followed probe word sentence. dependent measure response speed = k(1/reaction time). Sample sentence: Probe2, two groups subjects, pre-selected test short term memory. data sets (fictitious) used examples single-sample two-sample profile analysis simple repeated measure designs structured contrasts.","code":"* The tall man met the young girl who got the new hat. Pos'ns: 1 2 3 4 5 Function: ADJ1 SUBJ ADJ2 OBJ REL.PN"},{"path":"https://friendly.github.io/heplots/reference/Probe.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Response Speed in a Probe Experiment — Probe","text":"","code":"data(Probe1) boxplot(Probe1) pmod1 <- lm(cbind(p1,p2,p3,p4,p5) ~ 1, data=Probe1) idata <- data.frame(position=factor(1:5)) library(car) (pmod1.aov <- car::Anova(pmod1, idata=idata, idesign=~position)) #> Note: model has only an intercept; equivalent type-III tests substituted. #> #> Type III Repeated Measures MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 0.96312 261.15 1 10 1.705e-08 *** #> position 1 0.75177 5.30 4 7 0.02767 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # using default contrasts (p5 as reference level) heplot(pmod1, manova=pmod1.aov, iterm=\"position\", type=\"III\", idata=idata, idesign=~position) pairs(pmod1, manova=pmod1.aov, iterm=\"position\", type=\"III\", idata=idata, idesign=~position) # contrasts for substantative hypotheses regarding # sentence position effects C <- matrix(c( 1, 1, -1, -1, 0, 1, -1, 1, -1, 0, 1, -1, -1, 1, 0, 1, 1, 1, 1, -4), 5, 4) rownames(C) <- paste(\"p\", 1:5, sep=\"\") colnames(C) <- c(\"SubPred\", \"AdjNoun\", \"SPxAN\", \"RelPN\") contrasts(idata$position)<- C (pmod1.aov <- car::Anova(pmod1, idata=idata, idesign=~position)) #> Note: model has only an intercept; equivalent type-III tests substituted. #> #> Type III Repeated Measures MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 0.96312 261.15 1 10 1.705e-08 *** #> position 1 0.75177 5.30 4 7 0.02767 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(pmod1, manova=pmod1.aov, iterm=\"position\", type=\"III\", idata=idata, idesign=~position) pairs(pmod1, manova=pmod1.aov, iterm=\"position\", type=\"III\", idata=idata, idesign=~position)"},{"path":"https://friendly.github.io/heplots/reference/RatWeight.html","id":null,"dir":"Reference","previous_headings":"","what":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","title":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","text":"data study weight gain, investigators randomly assigned 30 rats three treatment groups: treatment 1 control (additive); treatments 2 3 consisted two different additives (thiouracil thyroxin respectively) rats drinking water. Weight measured baseline (week 0) weeks 1, 2, 3, 4. Due accident beginning study, data 3 rats thyroxin group unavailable.","code":""},{"path":"https://friendly.github.io/heplots/reference/RatWeight.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","text":"data frame 27 observations following 6 variables. trt factor levels Control Thiouracil Thyroxin wt0 Weight Week 0 (baseline weight) wt1 Weight Week 1 wt2 Weight Week 2 wt3 Weight Week 3 wt4 Weight Week 4","code":""},{"path":"https://friendly.github.io/heplots/reference/RatWeight.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","text":"Originally Box (1950), Table D (page 389), values weeks 1-4 recorded gain weight week. Fitzmaurice, G. M. Laird, N. M. Ware, J. H (2004). Applied Longitudinal Analysis, New York, NY: Wiley-Interscience. https://rdrr.io/rforge/ALA/.","code":""},{"path":"https://friendly.github.io/heplots/reference/RatWeight.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","text":"trt factor comes supplied contrasts comparing Control Thiouracil Thyroxin.","code":""},{"path":"https://friendly.github.io/heplots/reference/RatWeight.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","text":"Box, G.E.P. (1950). Problems analysis growth wear curves. Biometrics, 6, 362-389. Friendly, Michael (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 .","code":""},{"path":"https://friendly.github.io/heplots/reference/RatWeight.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Weight Gain in Rats Exposed to Thiouracil and Thyroxin — RatWeight","text":"","code":"data(RatWeight) contrasts(RatWeight$trt) #> [,1] [,2] #> Control -1 -1 #> Thiouracil 1 0 #> Thyroxin 0 1 rat.mod <- lm(cbind(wt0, wt1, wt2, wt3, wt4) ~ trt, data=RatWeight) rat.mod #> #> Call: #> lm(formula = cbind(wt0, wt1, wt2, wt3, wt4) ~ trt, data = RatWeight) #> #> Coefficients: #> wt0 wt1 wt2 wt3 wt4 #> (Intercept) 54.75714 76.88571 102.21905 123.67143 149.15238 #> trt1 -0.05714 -0.58571 -6.41905 -15.47143 -25.15238 #> trt2 0.81429 -1.02857 2.63810 9.04286 13.70476 #> idata <- data.frame(week = ordered(0:4)) car::Anova(rat.mod, idata=idata, idesign=~week, test=\"Roy\") #> #> Type II Repeated Measures MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 140.617 3374.8 1 24 < 2.2e-16 *** #> trt 2 0.657 7.9 2 24 0.002334 ** #> week 1 56.188 295.0 4 21 < 2.2e-16 *** #> trt:week 2 1.979 10.9 4 22 5.059e-05 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # quick look at between group effects pairs(rat.mod) # between-S, baseline & week 4 heplot(rat.mod, col=c(\"red\", \"blue\", \"green3\", \"green3\"), variables=c(1,5), hypotheses=c(\"trt1\", \"trt2\"), main=\"Rat weight data, Between-S effects\") # within-S heplot(rat.mod, idata=idata, idesign=~week, iterm=\"week\", col=c(\"red\", \"blue\", \"green3\"), # hypotheses=c(\"trt1\", \"trt2\"), main=\"Rat weight data, Within-S effects\")"},{"path":"https://friendly.github.io/heplots/reference/ReactTime.html","id":null,"dir":"Reference","previous_headings":"","what":"Reaction Time Data — ReactTime","title":"Reaction Time Data — ReactTime","text":"Data Maxwell Delaney (1990, p. 497) representing reaction times 10 subjects task visual stimuli tilted 0, 4, 8 degrees; noise absent present. subject responded 3 tilt x 2 noise = 6 conditions. data thus comprise repeated measure design two within-S factors.","code":""},{"path":"https://friendly.github.io/heplots/reference/ReactTime.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Reaction Time Data — ReactTime","text":"data frame 10 observations giving reaction time 6 conditions. deg0NA numeric vector deg4NA numeric vector deg8NA numeric vector deg0NP numeric vector deg4NP numeric vector deg8NP numeric vector","code":""},{"path":"https://friendly.github.io/heplots/reference/ReactTime.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Reaction Time Data — ReactTime","text":"Baron, J. Li, Y. (2003). Notes use R psychology experiments questionnaires, https://cran.r-project.org/doc/contrib/Baron-rpsych.pdf","code":""},{"path":"https://friendly.github.io/heplots/reference/ReactTime.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Reaction Time Data — ReactTime","text":"Michael Friendly (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 . Maxwell, S. E. & Delaney, H. D. (1990). Designing Experiments Analyzing Data: model comparison perspective. Pacific Grove, CA: Brooks/Cole.","code":""},{"path":"https://friendly.github.io/heplots/reference/ReactTime.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Reaction Time Data — ReactTime","text":"","code":"data(ReactTime) (RT.mod <- lm(as.matrix(ReactTime)~1)) #> #> Call: #> lm(formula = as.matrix(ReactTime) ~ 1) #> #> Coefficients: #> deg0NA deg4NA deg8NA deg0NP deg4NP deg8NP #> (Intercept) 462 510 528 492 660 762 #> # within-S factors within <- expand.grid(tilt=ordered(c(0,4,8)), noise=c(\"NA\", \"NP\")) car::Anova(RT.mod, idata=within, idesign=~tilt * noise) #> Note: model has only an intercept; equivalent type-III tests substituted. #> #> Type III Repeated Measures MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 0.98518 598.45 1 9 1.527e-09 *** #> tilt 1 0.88760 31.59 2 8 0.0001596 *** #> noise 1 0.78955 33.77 1 9 0.0002560 *** #> tilt:noise 1 0.91822 44.91 2 8 4.472e-05 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(RT.mod, idata=within, idesign=~tilt * noise, iterm=\"tilt\") #> Note: model has only an intercept; equivalent type-III tests substituted. # plotting means and std errors directly levels <- expand.grid(Tilt=c(0,4,8), noise=c(\"NA\", \"NP\")) (means.df <- data.frame(levels, mean=colMeans(ReactTime), se=sqrt(diag(var(ReactTime)))/9)) #> Tilt noise mean se #> deg0NA 0 NA 462 6.324555 #> deg4NA 4 NA 510 9.558139 #> deg8NA 8 NA 528 8.777075 #> deg0NP 0 NP 492 9.838197 #> deg4NP 4 NP 660 12.171612 #> deg8NP 8 NP 762 12.976712 with(means.df, { plot(Tilt, mean, type=\"n\", main=\"Reaction Time data\", xlab=\"Tilt\", ylab=\"Reaction time\") colors <- rep(c(\"red\", \"blue\"), each=3) pts <- rep(c(15, 16), each=3) lines(Tilt[1:3], mean[1:3], col=\"red\", lwd=2) lines(Tilt[4:6], mean[4:6], col=\"blue\", lwd=2) points(Tilt, mean, pch=pts, col=colors, cex=1.2) arrows(Tilt, mean-se, Tilt, mean+se, angle=90, code=3, col=colors, len=.05, lwd=2) # labels at last point, in lieu of legend text(Tilt[3], mean[3]-10, labels=\"NA\", col=\"red\", pos=1) text(Tilt[6], mean[6]-10, labels=\"NP\", col=\"blue\", pos=1) } )"},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":null,"dir":"Reference","previous_headings":"","what":"Robust Fitting of Multivariate Linear Models — robmlm","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"Fit multivariate linear model robust regression using simple M estimator.","code":""},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"","code":"robmlm(X, ...) # S3 method for default robmlm( X, Y, w, P = 2 * pnorm(4.685, lower.tail = FALSE), tune, max.iter = 100, psi = psi.bisquare, tol = 1e-06, initialize, verbose = FALSE, ... ) # S3 method for formula robmlm( formula, data, subset, weights, na.action, model = TRUE, contrasts = NULL, ... ) # S3 method for robmlm print(x, ...) # S3 method for robmlm summary(object, ...) # S3 method for summary.robmlm print(x, ...)"},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"X default method, model matrix, including constant (present) ... arguments, passed . particular relevant control arguments can passed robmlm.default method. Y default method, response matrix w prior weights P two-tail probability, find cutoff quantile chisq (tuning constant); default set bisquare weight function tune tuning constant (given directly) max.iter maximum number iterations psi robustness weight function; psi.bisquare default tol convergence tolerance, maximum relative change coefficients initialize modeling function find start values coefficients, equation--equation; absent WLS (lm.wfit) used verbose show iteration history? (TRUE FALSE) formula formula form cbind(y1, y2, ...) ~ x1 + x2 + .... data data frame variables specified formula preferentially taken. subset index vector specifying cases used fitting. weights vector prior weights case. na.action function specify action taken NAs found. 'factory-fresh' default action R na.omit, can changed options(na.action=). model model frame returned object? contrasts optional contrast specifications; see lm details. x robmlm object object robmlm object","code":""},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"object class \"robmlm\" inheriting c(\"mlm\", \"lm\"). means returned \"robmlm\" contains components \"mlm\" objects described lm, plus following: weights final observation weights iterations number iterations converged logical: IWLS process converge? generic accessor functions coefficients, effects, fitted.values residuals extract various useful features value returned robmlm.","code":""},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"S3 methods designed provide specification class robust methods extend mlms, therefore compatible mlm extensions, including Anova heplot. Fitting done iterated re-weighted least squares (IWLS), using weights based Mahalanobis squared distances current residuals origin, scaling (covariance) matrix calculated cov.trob. design methods loosely modeled rlm. internal vcov.mlm function extension standard vcov method providing observation weights.","code":""},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":". Marazzi (1993) Algorithms, Routines S Functions Robust Statistics. Wadsworth & Brooks/Cole.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"John Fox; packaged Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/robmlm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Robust Fitting of Multivariate Linear Models — robmlm","text":"","code":"############## # Skulls data # make shorter labels for epochs and nicer variable labels in heplots Skulls$epoch <- factor(Skulls$epoch, labels=sub(\"c\",\"\",levels(Skulls$epoch))) # variable labels vlab <- c(\"maxBreadth\", \"basibHeight\", \"basialLength\", \"nasalHeight\") # fit manova model, classically and robustly sk.mod <- lm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) sk.rmod <- robmlm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) # standard mlm methods apply here coefficients(sk.rmod) #> mb bh bl nh #> (Intercept) 133.9539529 132.6656599 96.50561801 50.8900600 #> epoch.L 4.1659721 -2.1793681 -4.84240950 1.1168866 #> epoch.Q -0.3671411 -1.3069085 -0.04276618 0.2817763 #> epoch.C -0.5833713 -0.7912067 1.03002114 -0.8379419 #> epoch^4 0.6350148 0.8787857 -0.55919989 -0.6233314 # index plot of weights plot(sk.rmod$weights, type=\"h\", xlab=\"Case Index\", ylab=\"Robust mlm weight\", col=\"gray\") points(sk.rmod$weights, pch=16, col=Skulls$epoch) axis(side=1, at=15+seq(0,120,30), labels=levels(Skulls$epoch), tick=FALSE, cex.axis=1) # heplots to see effect of robmlm vs. mlm heplot(sk.mod, hypotheses=list(Lin=\"epoch.L\", Quad=\"epoch.Q\"), xlab=vlab[1], ylab=vlab[2], cex=1.25, lty=1) heplot(sk.rmod, hypotheses=list(Lin=\"epoch.L\", Quad=\"epoch.Q\"), add=TRUE, error.ellipse=TRUE, lwd=c(2,2), lty=c(2,2), term.labels=FALSE, hyp.labels=FALSE, err.label=\"\") ############## # Pottery data data(Pottery, package = \"carData\") pottery.mod <- lm(cbind(Al,Fe,Mg,Ca,Na)~Site, data=Pottery) pottery.rmod <- robmlm(cbind(Al,Fe,Mg,Ca,Na)~Site, data=Pottery) car::Anova(pottery.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Site 3 1.5539 4.2984 15 60 2.413e-05 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 car::Anova(pottery.rmod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Site 3 1.975 6.5516 15 51 1.722e-07 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # index plot of weights plot(pottery.rmod$weights, type=\"h\") points(pottery.rmod$weights, pch=16, col=Pottery$Site) # heplots to see effect of robmlm vs. mlm heplot(pottery.mod, cex=1.3, lty=1) heplot(pottery.rmod, add=TRUE, error.ellipse=TRUE, lwd=c(2,2), lty=c(2,2), term.labels=FALSE, err.label=\"\") ############### # Prestige data data(Prestige, package = \"carData\") # treat women and prestige as response variables for this example prestige.mod <- lm(cbind(women, prestige) ~ income + education + type, data=Prestige) prestige.rmod <- robmlm(cbind(women, prestige) ~ income + education + type, data=Prestige) coef(prestige.mod) #> women prestige #> (Intercept) 29.638865042 -0.622929165 #> income -0.004594789 0.001013193 #> education 1.677749298 3.673166052 #> typeprof 20.761455686 6.038970651 #> typewc 27.911084356 -2.737230718 coef(prestige.rmod) #> women prestige #> (Intercept) 24.696906731 0.019651597 #> income -0.004902077 0.001082214 #> education 2.352283991 3.549614674 #> typeprof 18.737098949 6.394466644 #> typewc 26.762870920 -2.570933052 # how much do coefficients change? round(coef(prestige.mod) - coef(prestige.rmod),3) #> women prestige #> (Intercept) 4.942 -0.643 #> income 0.000 0.000 #> education -0.675 0.124 #> typeprof 2.024 -0.355 #> typewc 1.148 -0.166 # pretty plot of case weights plot(prestige.rmod$weights, type=\"h\", xlab=\"Case Index\", ylab=\"Robust mlm weight\", col=\"gray\") points(prestige.rmod$weights, pch=16, col=Prestige$type) legend(0, 0.7, levels(Prestige$type), pch=16, col=palette()[1:3], bg=\"white\") heplot(prestige.mod, cex=1.4, lty=1) heplot(prestige.rmod, add=TRUE, error.ellipse=TRUE, lwd=c(2,2), lty=c(2,2), term.labels=FALSE, err.label=\"\")"},{"path":"https://friendly.github.io/heplots/reference/Rohwer.html","id":null,"dir":"Reference","previous_headings":"","what":"Rohwer Data Set — Rohwer","title":"Rohwer Data Set — Rohwer","text":"Data experiment William D. Rohwer kindergarten children designed examine well performance set paired-associate (PA) tasks can predict performance measures aptitude achievement.","code":""},{"path":"https://friendly.github.io/heplots/reference/Rohwer.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Rohwer Data Set — Rohwer","text":"data frame 69 observations following 10 variables. group numeric vector, corresponding SES SES Socioeconomic status, factor levels Hi Lo SAT numeric vector: score Student Achievement Test PPVT numeric vector: score Peabody Picture Vocabulary Test Raven numeric vector: score Raven Progressive Matrices Test n numeric vector: performance 'named' PA task s numeric vector: performance 'still' PA task ns numeric vector: performance 'named still' PA task na numeric vector: performance 'named action' PA task ss numeric vector: performance 'sentence still' PA task","code":""},{"path":"https://friendly.github.io/heplots/reference/Rohwer.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Rohwer Data Set — Rohwer","text":"Timm, N.H. 1975). Multivariate Analysis Applications Education Psychology. Wadsworth (Brooks/Cole), Examples 4.3 (p. 281), 4.7 (p. 313), 4.13 (p. 344).","code":""},{"path":"https://friendly.github.io/heplots/reference/Rohwer.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Rohwer Data Set — Rohwer","text":"variables SAT, PPVT Raven responses potentially explained performance paired-associate (PA) learning taskn, s, ns, na, ss.","code":""},{"path":"https://friendly.github.io/heplots/reference/Rohwer.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Rohwer Data Set — Rohwer","text":"Friendly, M. (2007). plots Multivariate General Linear Models. Journal Computational Graphical Statistics, 16(2) 421--444. http://datavis.ca/papers/jcgs-heplots.pdf","code":""},{"path":"https://friendly.github.io/heplots/reference/Rohwer.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Rohwer Data Set — Rohwer","text":"","code":"str(Rohwer) #> 'data.frame':\t69 obs. of 10 variables: #> $ group: int 1 1 1 1 1 1 1 1 1 1 ... #> $ SES : Factor w/ 2 levels \"Hi\",\"Lo\": 2 2 2 2 2 2 2 2 2 2 ... #> $ SAT : int 49 47 11 9 69 35 6 8 49 8 ... #> $ PPVT : int 48 76 40 52 63 82 71 68 74 70 ... #> $ Raven: int 8 13 13 9 15 14 21 8 11 15 ... #> $ n : int 1 5 0 0 2 2 0 0 0 3 ... #> $ s : int 2 14 10 2 7 15 1 0 0 2 ... #> $ ns : int 6 14 21 5 11 21 20 10 7 21 ... #> $ na : int 12 30 16 17 26 34 23 19 16 26 ... #> $ ss : int 16 27 16 8 17 25 18 14 13 25 ... ## ANCOVA, assuming equal slopes rohwer.mod <- lm(cbind(SAT, PPVT, Raven) ~ SES + n + s + ns + na + ss, data=Rohwer) car::Anova(rohwer.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> SES 1 0.37853 12.1818 3 60 2.507e-06 *** #> n 1 0.04030 0.8400 3 60 0.477330 #> s 1 0.09271 2.0437 3 60 0.117307 #> ns 1 0.19283 4.7779 3 60 0.004729 ** #> na 1 0.23134 6.0194 3 60 0.001181 ** #> ss 1 0.04990 1.0504 3 60 0.376988 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # Visualize the ANCOVA model heplot(rohwer.mod) # Add ellipse to test all 5 regressors heplot(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\"))) # View all pairs pairs(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\"))) # or 3D plot if (FALSE) { col <- c(\"red\", \"green3\", \"blue\", \"cyan\", \"magenta\", \"brown\", \"gray\") heplot3d(rohwer.mod, hypotheses=list(\"Regr\" = c(\"n\", \"s\", \"ns\", \"na\", \"ss\")), col=col, wire=FALSE) } ## fit separate, independent models for Lo/Hi SES rohwer.ses1 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, data=Rohwer, subset=SES==\"Hi\") rohwer.ses2 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, data=Rohwer, subset=SES==\"Lo\") # overlay the separate HE plots heplot(rohwer.ses1, ylim=c(40,110),col=c(\"red\", \"black\")) heplot(rohwer.ses2, add=TRUE, col=c(\"blue\", \"black\"), grand.mean=TRUE, error.ellipse=TRUE)"},{"path":"https://friendly.github.io/heplots/reference/RootStock.html","id":null,"dir":"Reference","previous_headings":"","what":"Growth of Apple Trees from Different Root Stocks — RootStock","title":"Growth of Apple Trees from Different Root Stocks — RootStock","text":"classic experiment carried 1918 1934, growth apple trees six different rootstocks compared four measures size.","code":""},{"path":"https://friendly.github.io/heplots/reference/RootStock.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Growth of Apple Trees from Different Root Stocks — RootStock","text":"data frame 48 observations following 5 variables. rootstock factor levels 1 2 3 4 5 6 girth4 numeric vector: trunk girth 4 years (mm x 100) ext4 numeric vector: extension growth 4 years (m) girth15 numeric vector: trunk girth 15 years (mm x 100) weight15 numeric vector: weight tree ground 15 years (lb x 1000)","code":""},{"path":"https://friendly.github.io/heplots/reference/RootStock.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Growth of Apple Trees from Different Root Stocks — RootStock","text":"Andrews, D. Herzberg, . (1985). Data: Collection Problems Many Fields Student Research Worker Springer-Verlag, pp. 357--360.","code":""},{"path":"https://friendly.github.io/heplots/reference/RootStock.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Growth of Apple Trees from Different Root Stocks — RootStock","text":"balanced, one-way MANOVA design, n=8 trees rootstock.","code":""},{"path":"https://friendly.github.io/heplots/reference/RootStock.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Growth of Apple Trees from Different Root Stocks — RootStock","text":"Rencher, . C. (1995). Methods Multivariate Analysis. New York: Wiley, Table 6.2","code":""},{"path":"https://friendly.github.io/heplots/reference/RootStock.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Growth of Apple Trees from Different Root Stocks — RootStock","text":"","code":"library(car) data(RootStock) ## maybe str(RootStock) ; plot(RootStock) ... root.mod <- lm(cbind(girth4, ext4, girth15, weight15) ~ rootstock, data=RootStock) car::Anova(root.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> rootstock 5 1.3055 4.0697 20 168 1.983e-07 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 pairs(root.mod) # test two orthogonal contrasts among the rootstocks hyp <- matrix(c(2,-1,-1,-1,-1,2, 1, 0,0,0,0,-1), 2, 6, byrow=TRUE) car::linearHypothesis(root.mod, hyp) #> #> Sum of squares and products for the hypothesis: #> girth4 ext4 girth15 weight15 #> girth4 2.684223 7.573365 7.792122 1.617892 #> ext4 7.573365 22.489458 23.293194 5.760003 #> girth15 7.792122 23.293194 24.145778 6.090615 #> weight15 1.617892 5.760003 6.090615 2.248755 #> #> Sum of squares and products for error: #> girth4 ext4 girth15 weight15 #> girth4 0.3199875 1.696564 0.5540875 0.217140 #> ext4 1.6965637 12.142790 4.3636125 2.110214 #> girth15 0.5540875 4.363612 4.2908125 2.481656 #> weight15 0.2171400 2.110214 2.4816562 1.722525 #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 2 1.426293 24.86102 8 80 < 2.22e-16 *** #> Wilks 2 0.020401 58.51245 8 78 < 2.22e-16 *** #> Hotelling-Lawley 2 26.121884 124.07895 8 76 < 2.22e-16 *** #> Roy 2 25.254884 252.54884 4 40 < 2.22e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(root.mod, hypotheses=list(Contrasts=hyp, C1=hyp[1,], C2=hyp[2,])) heplot1d(root.mod, hypotheses=list(Contrasts=hyp, C1=hyp[1,], C2=hyp[2,]))"},{"path":"https://friendly.github.io/heplots/reference/Sake.html","id":null,"dir":"Reference","previous_headings":"","what":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","title":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","text":"Siotani et al. (1985) describe study Japanese rice wine (sake) used investigate relationship two subjective ratings (taste smell) number physical measurements 30 brands sake.","code":""},{"path":"https://friendly.github.io/heplots/reference/Sake.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","text":"data frame 30 observations following 10 variables. taste mean taste rating smell mean smell rating pH pH measurement acidity1 one measure acidity acidity2 another measure acidity sake Sake-meter score rsugar direct reducing sugar content tsugar total sugar content alcohol alcohol content nitrogen formol-nitrogen content","code":""},{"path":"https://friendly.github.io/heplots/reference/Sake.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","text":"Siotani, M. Hayakawa, T. & Fujikoshi, Y. (1985). Modern Multivariate Statistical Analysis: Graduate Course Handbook. American Sciences Press, p. 217.","code":""},{"path":"https://friendly.github.io/heplots/reference/Sake.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","text":"data provide one example case multivariate regression benefit multiple outcome measures, using standard tests. Barrett (2003) uses data illustrate influence measures multivariate regression models. taste smell values mean ratings 10 experts unknown scale.","code":""},{"path":"https://friendly.github.io/heplots/reference/Sake.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","text":"Barrett, B. E. (2003). Understanding Influence Multivariate Regression. Communications Statistics - Theory Methods 32 (3), 667-680.","code":""},{"path":"https://friendly.github.io/heplots/reference/Sake.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Taste Ratings of Japanese Rice Wine (Sake) — Sake","text":"","code":"data(Sake) # quick look at the data boxplot(scale(Sake)) Sake.mod <- lm(cbind(taste,smell) ~ ., data=Sake) library(car) car::Anova(Sake.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> pH 1 0.276246 3.8169 2 20 0.03944 * #> acidity1 1 0.030788 0.3177 2 20 0.73145 #> acidity2 1 0.183297 2.2444 2 20 0.13202 #> sake 1 0.141187 1.6440 2 20 0.21827 #> rsugar 1 0.178200 2.1684 2 20 0.14050 #> tsugar 1 0.054842 0.5802 2 20 0.56891 #> alcohol 1 0.075954 0.8220 2 20 0.45387 #> nitrogen 1 0.056486 0.5987 2 20 0.55909 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 predictors <- colnames(Sake)[-(1:2)] # overall multivariate regression test linearHypothesis(Sake.mod, predictors) #> #> Sum of squares and products for the hypothesis: #> taste smell #> taste 1.4171079 0.5786338 #> smell 0.5786338 1.4095094 #> #> Sum of squares and products for error: #> taste smell #> taste 3.172559 2.248366 #> smell 2.248366 4.173491 #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 8 0.6300580 1.207279 16 42 0.30236 #> Wilks 8 0.4642360 1.169193 16 40 0.33210 #> Hotelling-Lawley 8 0.9509599 1.129265 16 38 0.36489 #> Roy 8 0.6270207 1.645929 8 21 0.17134 heplot(Sake.mod, hypotheses=list(\"Regr\" = predictors))"},{"path":"https://friendly.github.io/heplots/reference/schooldata.html","id":null,"dir":"Reference","previous_headings":"","what":"School Data — schooldata","title":"School Data — schooldata","text":"School Data, Charnes et al. (1981). aim explain scores 3 different tests, reading, mathematics selfesteem 70 school sites means 5 explanatory variables related parents teachers.","code":""},{"path":"https://friendly.github.io/heplots/reference/schooldata.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"School Data — schooldata","text":"data frame 70 observations following 8 variables. education Education level mother measured terms percentage high school graduates among female parents occupation Highest occupation family member according pre-arranged rating scale visit Parental visits index representing number visits school site counseling Parent counseling index calculated data time spent child school-related topics reading together, etc. teacher Number teachers given site reading Reading score measured Metropolitan Achievement Test mathematics Mathematics score measured Metropolitan Achievement Test selfesteem Coopersmith Self-Esteem Inventory, intended measure self-esteem","code":""},{"path":"https://friendly.github.io/heplots/reference/schooldata.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"School Data — schooldata","text":". Charnes, W.W. Cooper E. Rhodes (1981). Evaluating Program Managerial Efficiency: Application Data Envelopment Analysis Program Follow . Management Science, 27, 668-697.","code":""},{"path":"https://friendly.github.io/heplots/reference/schooldata.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"School Data — schooldata","text":"dataset shamelessly borrowed FRB package. relationships among variables unusual, fact revealed plotting.","code":""},{"path":"https://friendly.github.io/heplots/reference/schooldata.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"School Data — schooldata","text":"","code":"data(schooldata) # initial screening plot(schooldata) # better plot library(corrgram) corrgram(schooldata, lower.panel=panel.ellipse, upper.panel=panel.pts) #fit the MMreg model school.mod <- lm(cbind(reading, mathematics, selfesteem) ~ education + occupation + visit + counseling + teacher, data=schooldata) # shorthand: fit all others school.mod <- lm(cbind(reading, mathematics, selfesteem) ~ ., data=schooldata) car::Anova(school.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> education 1 0.37564 12.4337 3 62 1.820e-06 *** #> occupation 1 0.56658 27.0159 3 62 2.687e-11 *** #> visit 1 0.26032 7.2734 3 62 0.0002948 *** #> counseling 1 0.06465 1.4286 3 62 0.2429676 #> teacher 1 0.04906 1.0661 3 62 0.3700291 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # HE plots heplot(school.mod, fill=TRUE, fill.alpha=0.1) pairs(school.mod, fill=TRUE, fill.alpha=0.1) # robust model, using robmlm() school.rmod <- robmlm(cbind(reading, mathematics, selfesteem) ~ ., data=schooldata) # note that counseling is now significant car::Anova(school.rmod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> education 1 0.39455 12.8161 3 59 1.488e-06 *** #> occupation 1 0.59110 28.4301 3 59 1.683e-11 *** #> visit 1 0.23043 5.8888 3 59 0.0013819 ** #> counseling 1 0.25257 6.6456 3 59 0.0006083 *** #> teacher 1 0.09812 2.1395 3 59 0.1048263 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # Index plot of the weights wts <- school.rmod$weights notable <- which(wts < 0.8) plot(wts, type = \"h\", col=\"gray\", ylab = \"Observation weight\") points(1:length(wts), wts, pch=16, col = ifelse(wts < 0.8, \"red\", \"black\")) text(notable, wts[notable], labels = notable, pos = 3, col = \"red\") # compare classical HE plot with that based on the robust model heplot(school.mod, cex=1.4, lty=1, fill=TRUE, fill.alpha=0.1) heplot(school.rmod, add=TRUE, error.ellipse=TRUE, lwd=c(2,2), lty=c(2,2), term.labels=FALSE, err.label=\"\", fill=TRUE)"},{"path":"https://friendly.github.io/heplots/reference/Skulls.html","id":null,"dir":"Reference","previous_headings":"","what":"Egyptian Skulls — Skulls","title":"Egyptian Skulls — Skulls","text":"Measurements made Egyptian skulls five epochs.","code":""},{"path":"https://friendly.github.io/heplots/reference/Skulls.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Egyptian Skulls — Skulls","text":"data frame 150 observations following 5 variables. epoch epoch skull assigned , ordered factor levels c4000BC c3300BC, c1850BC, c200BC, cAD150, years given approximately, course. mb maximal breadth skull. bh basibregmatic height skull. bl basialiveolar length skull. nh nasal height skull.","code":""},{"path":"https://friendly.github.io/heplots/reference/Skulls.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Egyptian Skulls — Skulls","text":"D. J. Hand, F. Daly, . D. Lunn, K. J. McConway E. Ostrowski (1994). Handbook Small Datasets, Chapman Hall/CRC, London.","code":""},{"path":"https://friendly.github.io/heplots/reference/Skulls.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Egyptian Skulls — Skulls","text":"epochs correspond following periods Egyptian history: early predynastic period (circa 4000 BC); late predynastic period (circa 3300 BC); 12th 13th dynasties (circa 1850 BC); Ptolemiac period (circa 200 BC); Roman period (circa 150 AD). question whether measurements change time. Non-constant measurements skulls time indicate interbreeding immigrant populations. Note using polynomial contrasts epoch essentially treats time points equally spaced.","code":""},{"path":"https://friendly.github.io/heplots/reference/Skulls.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Egyptian Skulls — Skulls","text":"Thomson, . Randall-Maciver, R. (1905) Ancient Races Thebaid, Oxford: Oxford University Press. Hand, D. J., F. Daly, . D. Lunn, K. J. McConway E. Ostrowski (1994). Handbook Small Datasets, Chapman Hall/CRC, London.","code":""},{"path":"https://friendly.github.io/heplots/reference/Skulls.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Egyptian Skulls — Skulls","text":"","code":"data(Skulls) library(car) # for Anova # make shorter labels for epochs Skulls$epoch <- factor(Skulls$epoch, labels=sub(\"c\",\"\",levels(Skulls$epoch))) # longer variable labels vlab <- c(\"maxBreadth\", \"basibHeight\", \"basialLength\", \"nasalHeight\") # fit manova model sk.mod <- lm(cbind(mb, bh, bl, nh) ~ epoch, data=Skulls) Anova(sk.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> epoch 4 0.35331 3.512 16 580 4.675e-06 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 summary(Anova(sk.mod)) #> #> Type II MANOVA Tests: #> #> Sum of squares and products for error: #> mb bh bl nh #> mb 3061.066667 5.333333 11.46667 291.3000 #> bh 5.333333 3405.266667 754.00000 412.5333 #> bl 11.466667 754.000000 3505.96667 164.3333 #> nh 291.300000 412.533333 164.33333 1472.1333 #> #> ------------------------------------------ #> #> Term: epoch #> #> Sum of squares and products for the hypothesis: #> mb bh bl nh #> mb 502.8267 -228.14667 -626.6267 135.43333 #> bh -228.1467 229.90667 292.2800 -66.06667 #> bl -626.6267 292.28000 803.2933 -180.73333 #> nh 135.4333 -66.06667 -180.7333 61.20000 #> #> Multivariate Tests: epoch #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 4 0.3533056 3.512037 16 580.0000 4.6753e-06 *** #> Wilks 4 0.6635858 3.900928 16 434.4548 7.0102e-07 *** #> Hotelling-Lawley 4 0.4818191 4.230974 16 562.0000 8.2782e-08 *** #> Roy 4 0.4250954 15.409707 4 145.0000 1.5883e-10 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test trends over epochs print(linearHypothesis(sk.mod, \"epoch.L\"), SSP=FALSE) # linear component #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.2913791 14.59731 4 142 5.1953e-10 *** #> Wilks 1 0.7086209 14.59731 4 142 5.1953e-10 *** #> Hotelling-Lawley 1 0.4111918 14.59731 4 142 5.1953e-10 *** #> Roy 1 0.4111918 14.59731 4 142 5.1953e-10 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 print(linearHypothesis(sk.mod, \"epoch.Q\"), SSP=FALSE) # quadratic component #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.0183468 0.6634844 4 142 0.61837 #> Wilks 1 0.9816532 0.6634844 4 142 0.61837 #> Hotelling-Lawley 1 0.0186897 0.6634844 4 142 0.61837 #> Roy 1 0.0186897 0.6634844 4 142 0.61837 # typical scatterplots are not very informative scatterplot(mb ~ bh|epoch, data=Skulls, ellipse = list(levels=0.68), smooth=FALSE, legend = list(coords=\"topright\"), xlab=vlab[2], ylab=vlab[1]) scatterplot(mb ~ bl|epoch, data=Skulls, ellipse = list(levels=0.68), smooth=FALSE, legend = list(coords=\"topright\"), xlab=vlab[3], ylab=vlab[1]) # HE plots heplot(sk.mod, hypotheses=list(Lin=\"epoch.L\", Quad=\"epoch.Q\"), xlab=vlab[1], ylab=vlab[2]) pairs(sk.mod, hypotheses=list(Lin=\"epoch.L\", Quad=\"epoch.Q\"), var.labels=vlab) # 3D plot shows that nearly all of hypothesis variation is linear! if (FALSE) { heplot3d(sk.mod, hypotheses=list(Lin=\"epoch.L\", Quad=\"epoch.Q\"), col=c(\"pink\", \"blue\")) # view in canonical space if (require(candisc)) { sk.can <- candisc(sk.mod) sk.can heplot(sk.can) heplot3d(sk.can) } }"},{"path":"https://friendly.github.io/heplots/reference/SocGrades.html","id":null,"dir":"Reference","previous_headings":"","what":"Grades in a Sociology Course — SocGrades","title":"Grades in a Sociology Course — SocGrades","text":"data set SocGrades contains four outcome measures student performance introductory sociology course together six potential predictors. data used Marascuilo Levin (1983) example canonical correlation analysis, also suitable examples multivariate multiple regression, MANOVA, MANCOVA step-analysis multivariate linear models.","code":""},{"path":"https://friendly.github.io/heplots/reference/SocGrades.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Grades in a Sociology Course — SocGrades","text":"data frame 40 observations following 10 variables. class Social class, ordered factor levels 1 > 2 > 3 sex sex, factor levels F M gpa grade point average boards College Board test scores hssoc previous high school unit sociology, factor 2 , yes pretest score course pretest midterm1 score first midterm exam midterm2 score second midterm exam final score final exam eval course evaluation","code":""},{"path":"https://friendly.github.io/heplots/reference/SocGrades.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Grades in a Sociology Course — SocGrades","text":"Marascuilo, L. . Levin, J. R. (1983). Multivariate Statistics Social Sciences Monterey, CA: Brooks/Cole, Table 5-1, p. 192.","code":""},{"path":"https://friendly.github.io/heplots/reference/SocGrades.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Grades in a Sociology Course — SocGrades","text":"midterm1, midterm2, final, possibly eval response variables. variables potential predictors. factors class, sex, hssoc can used .numeric correlational analyses.","code":""},{"path":"https://friendly.github.io/heplots/reference/SocGrades.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Grades in a Sociology Course — SocGrades","text":"","code":"data(SocGrades) # basic MLM grades.mod <- lm(cbind(midterm1, midterm2, final, eval) ~ class + sex + gpa + boards + hssoc + pretest, data=SocGrades) car::Anova(grades.mod, test=\"Roy\") #> #> Type II MANOVA Tests: Roy test statistic #> Df test stat approx F num Df den Df Pr(>F) #> class 2 1.56729 11.7547 4 30 7.322e-06 *** #> sex 1 0.55300 4.0092 4 29 0.010419 * #> gpa 1 1.20780 8.7566 4 29 9.195e-05 *** #> boards 1 0.73142 5.3028 4 29 0.002489 ** #> hssoc 1 0.03496 0.2535 4 29 0.905171 #> pretest 1 0.31307 2.2697 4 29 0.085881 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 clr <- c(\"red\", \"blue\", \"darkgreen\", \"magenta\", \"brown\", \"black\", \"darkgray\") heplot(grades.mod, col=clr) pairs(grades.mod, col=clr) if (FALSE) { heplot3d(grades.mod, col=clr, wire=FALSE) } if (require(candisc)) { # calculate canonical results for all terms grades.can <- candiscList(grades.mod) # extract canonical R^2s unlist(lapply(grades.can, function(x) x$canrsq)) # plot class effect in canonical space heplot(grades.can, term=\"class\", scale=4) # 1 df terms: show canonical scores and weights for responses plot(grades.can, term=\"sex\") plot(grades.can, term=\"gpa\") plot(grades.can, term=\"boards\") }"},{"path":"https://friendly.github.io/heplots/reference/SocialCog.html","id":null,"dir":"Reference","previous_headings":"","what":"Social Cognitive Measures in Psychiatric Groups — SocialCog","title":"Social Cognitive Measures in Psychiatric Groups — SocialCog","text":"general purpose study (Hartman, 2016, Heinrichs et al. (2015)) evaluate patterns levels performance neurocognitive measures among individuals schizophrenia schizoaffective disorder using well-validated, comprehensive neurocognitive battery specifically designed individuals psychosis (Heinrichs et al. (2008))","code":""},{"path":"https://friendly.github.io/heplots/reference/SocialCog.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Social Cognitive Measures in Psychiatric Groups — SocialCog","text":"data frame 139 observations following 5 variables. Dx Diagnostic group, factor levels Schizophrenia, Schizoaffective, Control MgeEmotions Score Managing emotions test, numeric vector ToM Score Reading Mind Eyes test (theory mind), numeric vector ExtBias Externalizing Bias score, numeric vector PersBias Personal Bias score, numeric vector","code":""},{"path":"https://friendly.github.io/heplots/reference/SocialCog.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Social Cognitive Measures in Psychiatric Groups — SocialCog","text":"Hartman, L. . (2016). Schizophrenia Schizoaffective Disorder: One Condition Two? Unpublished PhD dissertation, York University. Heinrichs, R.W., Pinnock, F., Muharib, E., Hartman, L.., Goldberg, J.O., & McDermid Vaz, S. (2015). Neurocognitive normality schizophrenia revisited. Schizophrenia Research: Cognition, 2 (4), 227-232. doi: 10.1016/j.scog.2015.09.001","code":""},{"path":"https://friendly.github.io/heplots/reference/SocialCog.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Social Cognitive Measures in Psychiatric Groups — SocialCog","text":"data subset observations NeuroCog measures various scales social cognition also available. Interest whether schizophrenia group can distinguished schizoaffective group measures. Social Cognitive measures designed tap various aspects perception cognitive procession emotions others. Emotion perception assessed using Managing Emotions (MgeEmotions) score MCCB. \"theory mind\" (ToM) score assessed ability read emotions others photographs eye region male female faces. Two measures, externalizing bias (ExtBias) personalizing bias (PersBias) calculated scale measuring degree individuals attribute internal, personal situational causal attributions positive negative social events. See NeuroCog description sample. complete data social cognitive measures included data set. one extreme outlier schizophrenia group possible outliers control group, left tutorial purposes.","code":""},{"path":"https://friendly.github.io/heplots/reference/SocialCog.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Social Cognitive Measures in Psychiatric Groups — SocialCog","text":"","code":"library(car) data(SocialCog) SC.mod <- lm(cbind(MgeEmotions, ToM, ExtBias, PersBias) ~ Dx, data=SocialCog) SC.mod #> #> Call: #> lm(formula = cbind(MgeEmotions, ToM, ExtBias, PersBias) ~ Dx, #> data = SocialCog) #> #> Coefficients: #> MgeEmotions ToM ExtBias PersBias #> (Intercept) 41.80533 22.88849 1.75603 0.65488 #> Dx1 3.24012 2.09636 1.01670 -0.07297 #> Dx2 -4.34806 -1.02636 -0.85233 -0.01599 #> car::Anova(SC.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> Dx 2 0.21207 3.9735 8 268 0.0001817 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # test hypotheses of interest in terms of contrasts print(linearHypothesis(SC.mod, \"Dx1\"), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.1355144 5.21218 4 133 0.00062359 *** #> Wilks 1 0.8644856 5.21218 4 133 0.00062359 *** #> Hotelling-Lawley 1 0.1567573 5.21218 4 133 0.00062359 *** #> Roy 1 0.1567573 5.21218 4 133 0.00062359 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 print(linearHypothesis(SC.mod, \"Dx2\"), SSP=FALSE) #> #> Multivariate Tests: #> Df test stat approx F num Df den Df Pr(>F) #> Pillai 1 0.0697390 2.492658 4 133 0.046059 * #> Wilks 1 0.9302610 2.492658 4 133 0.046059 * #> Hotelling-Lawley 1 0.0749672 2.492658 4 133 0.046059 * #> Roy 1 0.0749672 2.492658 4 133 0.046059 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #' ## HE plots heplot(SC.mod, hypotheses=list(\"Dx1\"=\"Dx1\", \"Dx2\"=\"Dx2\"), fill=TRUE, fill.alpha=.1) pairs(SC.mod, fill=c(TRUE,FALSE), fill.alpha=.1)"},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate statistics for levels of factors — statList","title":"Calculate statistics for levels of factors — statList","text":"statList provides general method calculating univariate multivariate statistics matrix data.frame stratified one factors.","code":""},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate statistics for levels of factors — statList","text":"","code":"statList(X, factors, FUN, drop = FALSE, ...)"},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate statistics for levels of factors — statList","text":"X matrix data frame containing variables summarized factors vector, matrix data frame containing factors X summarized. factors specified, result calculated data X. FUN function applied pieces X, split factors. drop Logical, indicating whether empty levels factors dropped result. ... arguments, passed FUN.","code":""},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate statistics for levels of factors — statList","text":"Returns list items corresponding unique elements factors, interaction factors. item result applying FUN collection rows X. items named according levels factors.","code":""},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate statistics for levels of factors — statList","text":"statList general function. X first split factors, FUN applied result. colMeansList covList just calls statList appropriate FUN.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate statistics for levels of factors — statList","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/statList.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate statistics for levels of factors — statList","text":"","code":"# grand means statList(iris[,1:4], FUN=colMeans) #> [[1]] #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.843333 3.057333 3.758000 1.199333 #> # species means statList(iris[,1:4], iris$Species, FUN=colMeans) #> $setosa #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.006 3.428 1.462 0.246 #> #> $versicolor #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.936 2.770 4.260 1.326 #> #> $virginica #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 6.588 2.974 5.552 2.026 #> # same colMeansList(iris[,1:4], iris$Species) #> $setosa #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.006 3.428 1.462 0.246 #> #> $versicolor #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.936 2.770 4.260 1.326 #> #> $virginica #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 6.588 2.974 5.552 2.026 #> # var-cov matrices, by species covList(iris[,1:4], iris$Species) #> $setosa #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> Sepal.Length 0.12424898 0.099216327 0.016355102 0.010330612 #> Sepal.Width 0.09921633 0.143689796 0.011697959 0.009297959 #> Petal.Length 0.01635510 0.011697959 0.030159184 0.006069388 #> Petal.Width 0.01033061 0.009297959 0.006069388 0.011106122 #> #> $versicolor #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> Sepal.Length 0.26643265 0.08518367 0.18289796 0.05577959 #> Sepal.Width 0.08518367 0.09846939 0.08265306 0.04120408 #> Petal.Length 0.18289796 0.08265306 0.22081633 0.07310204 #> Petal.Width 0.05577959 0.04120408 0.07310204 0.03910612 #> #> $virginica #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> Sepal.Length 0.40434286 0.09376327 0.30328980 0.04909388 #> Sepal.Width 0.09376327 0.10400408 0.07137959 0.04762857 #> Petal.Length 0.30328980 0.07137959 0.30458776 0.04882449 #> Petal.Width 0.04909388 0.04762857 0.04882449 0.07543265 #> # multiple factors iris$Dummy <- sample(c(\"Hi\",\"Lo\"),150, replace=TRUE) colMeansList(iris[,1:4], iris[,5:6]) #> $setosa.Hi #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 4.930769 3.342308 1.476923 0.250000 #> #> $versicolor.Hi #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.884 2.720 4.208 1.308 #> #> $virginica.Hi #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 6.658333 3.008333 5.625000 2.066667 #> #> $setosa.Lo #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.0875000 3.5208333 1.4458333 0.2416667 #> #> $versicolor.Lo #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 5.988 2.820 4.312 1.344 #> #> $virginica.Lo #> Sepal.Length Sepal.Width Petal.Length Petal.Width #> 6.523077 2.942308 5.484615 1.988462 #>"},{"path":"https://friendly.github.io/heplots/reference/termMeans.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","title":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","text":"termMeans utility function designed calculate means levels factor(s) term multivariate linear model.","code":""},{"path":"https://friendly.github.io/heplots/reference/termMeans.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","text":"","code":"termMeans(mod, term, label.factors = FALSE, abbrev.levels = FALSE)"},{"path":"https://friendly.github.io/heplots/reference/termMeans.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","text":"mod mlm model object term character string indicating given term model. factors term must included model, even model data frame. label.factors true, rownames row result include name(s) factor(s) involved, followed level values. Otherwise, rownames include levels factor(s), multiple factors separated ':' abbrev.levels Either logical integer, specifying whether levels values factors term abbreviated constructing rownames. integer specifies minimum length abbreviation factor term.","code":""},{"path":"https://friendly.github.io/heplots/reference/termMeans.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","text":"Returns matrix whose columns correspond response variables model whose rows correspond levels factor(s) term.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/termMeans.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/termMeans.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate Means for a Term in a Multivariate Linear Model — termMeans","text":"","code":"factors <- expand.grid(A=factor(1:3),B=factor(1:2),C=factor(1:2)) n <- nrow(factors) responses <-data.frame(Y1=10+round(10*rnorm(n)),Y2=10+round(10*rnorm(n))) test <- data.frame(factors, responses) mod <- lm(cbind(Y1,Y2) ~ A*B, data=test) termMeans(mod, \"A\") #> Y1 Y2 #> 1 17.00 12.25 #> 2 9.50 10.75 #> 3 13.75 2.00 termMeans(mod, \"A:B\") #> Y1 Y2 #> 1:1 10.0 10.0 #> 2:1 3.0 19.5 #> 3:1 17.5 6.0 #> 1:2 24.0 14.5 #> 2:2 16.0 2.0 #> 3:2 10.0 -2.0 termMeans(mod, \"A:B\", label.factors=TRUE) #> Y1 Y2 #> A1:B1 10.0 10.0 #> A2:B1 3.0 19.5 #> A3:B1 17.5 6.0 #> A1:B2 24.0 14.5 #> A2:B2 16.0 2.0 #> A3:B2 10.0 -2.0 if (FALSE) { termMeans(mod, \"A:B:C\") # generates an error } plastic.mod <- lm(cbind(tear, gloss, opacity) ~ rate*additive, data=Plastic) colors = c(\"red\", \"darkblue\", \"darkgreen\", \"brown\") heplot(plastic.mod, col=colors, cex=1.25) # add means for interaction term intMeans <- termMeans(plastic.mod, 'rate:additive', abbrev=2) points(intMeans[,1], intMeans[,2], pch=18, cex=1.2, col=\"brown\") text(intMeans[,1], intMeans[,2], rownames(intMeans), adj=c(0.5,1), col=\"brown\")"},{"path":"https://friendly.github.io/heplots/reference/TIPI.html","id":null,"dir":"Reference","previous_headings":"","what":"Data on the Ten Item Personality Inventory — TIPI","title":"Data on the Ten Item Personality Inventory — TIPI","text":"Ten Item Personality Inventory (Gosling et al. 2003) brief inventory Big Five personality domains (Extraversion, Neuroticism, Conscientiousness, Agreeableness, Openness experience). dataset, originally Open Source Psychometrics Project (https://openpsychometrics.org/), used Jones et al. (2020), obtained version.","code":""},{"path":"https://friendly.github.io/heplots/reference/TIPI.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Data on the Ten Item Personality Inventory — TIPI","text":"data frame 1799 observations following 16 variables. Extraversion numeric vector Neuroticism numeric vector Conscientiousness numeric vector Agreeableness numeric vector Openness numeric vector education ordered factor levels #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> engnat 1 0.025927 9.327 5 1752 8.817e-09 *** #> gender 1 0.088275 33.926 5 1752 < 2.2e-16 *** #> education 3 0.080337 9.653 15 5262 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(tipi.mlm, fill=TRUE, fill.alpha=0.1) pairs(tipi.mlm, fill=TRUE, fill.alpha=0.1) # candisc works best for factors with >2 levels library(candisc) tipi.can <- candisc(tipi.mlm, term=\"education\") tipi.can #> #> Canonical Discriminant Analysis for education: #> #> CanRsq Eigenvalue Difference Percent Cumulative #> 1 0.0740709 0.0799963 0.075792 92.7124 92.712 #> 2 0.0041870 0.0042046 0.075792 4.8730 97.585 #> 3 0.0020791 0.0020834 0.075792 2.4146 100.000 #> #> Test of H0: The canonical correlations in the #> current row and all that follow are zero #> #> LR test stat approx F numDF denDF Pr(> F) #> 1 0.92014 9.8819 15 4842.4 <2e-16 *** #> 2 0.99374 1.3792 8 3510.0 0.2002 #> 3 0.99792 1.2195 3 1756.0 0.3011 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(tipi.can, fill=TRUE, fill.alpha=0.1, var.col = \"darkred\", var.cex = 1.5, var.lwd = 3) #> Vector scale factor set to 9.339074"},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":null,"dir":"Reference","previous_headings":"","what":"Make Colors Transparent — trans.colors","title":"Make Colors Transparent — trans.colors","text":"Takes vector colors (color names rgb hex values) adds specified alpha transparency .","code":""},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Make Colors Transparent — trans.colors","text":"","code":"trans.colors(col, alpha = 0.5, names = NULL)"},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Make Colors Transparent — trans.colors","text":"col character vector colors, either color names rgb hex values alpha alpha transparency value(s) apply color (0 means fully transparent 1 means opaque) names optional character vector names colors","code":""},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Make Colors Transparent — trans.colors","text":"vector color values form \"#rrggbbaa\"","code":""},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Make Colors Transparent — trans.colors","text":"Colors (col) alpha need length. shorter one replicated make length.","code":""},{"path":[]},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Make Colors Transparent — trans.colors","text":"Michael Friendly","code":""},{"path":"https://friendly.github.io/heplots/reference/trans.colors.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Make Colors Transparent — trans.colors","text":"","code":"trans.colors(palette(), alpha=0.5) #> [1] \"#00000080\" \"#DF536B80\" \"#61D04F80\" \"#2297E680\" \"#28E2E580\" \"#CD0BBC80\" #> [7] \"#F5C71080\" \"#9E9E9E80\" # alpha can be vectorized trans.colors(palette(), alpha=seq(0, 1, length=length(palette()))) #> [1] \"#00000000\" \"#DF536B24\" \"#61D04F49\" \"#2297E66D\" \"#28E2E592\" \"#CD0BBCB6\" #> [7] \"#F5C710DB\" \"#9E9E9EFF\" # lengths need not match: shorter one is repeated as necessary trans.colors(palette(), alpha=c(.1, .2)) #> [1] \"#0000001A\" \"#DF536B33\" \"#61D04F1A\" \"#2297E633\" \"#28E2E51A\" \"#CD0BBC33\" #> [7] \"#F5C7101A\" \"#9E9E9E33\" trans.colors(colors()[1:20]) #> [1] \"#FFFFFF80\" \"#F0F8FF80\" \"#FAEBD780\" \"#FFEFDB80\" \"#EEDFCC80\" \"#CDC0B080\" #> [7] \"#8B837880\" \"#7FFFD480\" \"#7FFFD480\" \"#76EEC680\" \"#66CDAA80\" \"#458B7480\" #> [13] \"#F0FFFF80\" \"#F0FFFF80\" \"#E0EEEE80\" \"#C1CDCD80\" \"#838B8B80\" \"#F5F5DC80\" #> [19] \"#FFE4C480\" \"#FFE4C480\" # single color, with various alphas trans.colors(\"red\", alpha=seq(0,1, length=5)) #> [1] \"#FF000000\" \"#FF000040\" \"#FF000080\" \"#FF0000BF\" \"#FF0000FF\" # assign names trans.colors(\"red\", alpha=seq(0,1, length=5), names=paste(\"red\", 1:5, sep=\"\")) #> red1 red2 red3 red4 red5 #> \"#FF000000\" \"#FF000040\" \"#FF000080\" \"#FF0000BF\" \"#FF0000FF\""},{"path":"https://friendly.github.io/heplots/reference/VocabGrowth.html","id":null,"dir":"Reference","previous_headings":"","what":"Vocabulary growth data — VocabGrowth","title":"Vocabulary growth data — VocabGrowth","text":"Data Laboratory School University Chicago. consist scores cohort pupils grades 8-11 vocabulary section Cooperative Reading Test. scores scaled common, arbitrary origin unit measurement, comparable four grades.","code":""},{"path":"https://friendly.github.io/heplots/reference/VocabGrowth.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Vocabulary growth data — VocabGrowth","text":"data frame 64 observations following 4 variables. grade8 Grade 8 vocabulary score grade9 Grade 9 vocabulary score grade10 Grade 10 vocabulary score grade11 Grade 11 vocabulary score","code":""},{"path":"https://friendly.github.io/heplots/reference/VocabGrowth.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Vocabulary growth data — VocabGrowth","text":"R.D. Bock, Multivariate statistical methods behavioral research, McGraw-Hill, New York, 1975, pp453.","code":""},{"path":"https://friendly.github.io/heplots/reference/VocabGrowth.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Vocabulary growth data — VocabGrowth","text":"Since data cover age range physical growth beginning decelerate, interest whether similar effect occurs acquisition new vocabulary.","code":""},{"path":"https://friendly.github.io/heplots/reference/VocabGrowth.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Vocabulary growth data — VocabGrowth","text":"Friendly, Michael (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 . Keesling, J.W., Bock, R.D. et al, \"Laboratory School study vocabulary growth\", University Chicago, 1975.","code":""},{"path":"https://friendly.github.io/heplots/reference/VocabGrowth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Vocabulary growth data — VocabGrowth","text":"","code":"library(car) data(VocabGrowth) # Standard Multivariate & Univariate repeated measures analysis Vocab.mod <- lm(cbind(grade8,grade9,grade10,grade11) ~ 1, data=VocabGrowth) idata <-data.frame(grade=ordered(8:11)) car::Anova(Vocab.mod, idata=idata, idesign=~grade, type=\"III\") #> #> Type III Repeated Measures MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 0.65289 118.498 1 63 4.115e-16 *** #> grade 1 0.82578 96.376 3 61 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ##Type III Repeated Measures MANOVA Tests: Pillai test statistic ## Df test stat approx F num Df den Df Pr(>F) ##(Intercept) 1 0.653 118.498 1 63 4.115e-16 *** ##grade 1 0.826 96.376 3 61 < 2.2e-16 *** heplot(Vocab.mod, type=\"III\", idata=idata, idesign=~grade, iterm=\"grade\", main=\"HE plot for Grade effect\") ### doing this 'manually' by explicitly transforming Y -> Y M # calculate Y M, using polynomial contrasts trends <- as.matrix(VocabGrowth) %*% poly(8:11, degree=3) colnames(trends)<- c(\"Linear\", \"Quad\", \"Cubic\") # test all trend means = 0 == Grade effect within.mod <- lm(trends ~ 1) Manova(within.mod) #> Note: model has only an intercept; equivalent type-III tests substituted. #> #> Type III MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> (Intercept) 1 0.82578 96.376 3 61 < 2.2e-16 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(within.mod, terms=\"(Intercept)\", col=c(\"red\", \"blue\"), type=\"3\", term.labels=\"Grade\", main=\"HE plot for Grade effect\") mark.H0()"},{"path":"https://friendly.github.io/heplots/reference/WeightLoss.html","id":null,"dir":"Reference","previous_headings":"","what":"Weight Loss Data — WeightLoss","title":"Weight Loss Data — WeightLoss","text":"Contrived data weight loss self esteem three months, three groups individuals: Control, Diet Diet + Exercise. data constitute double-multivariate design.","code":""},{"path":"https://friendly.github.io/heplots/reference/WeightLoss.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Weight Loss Data — WeightLoss","text":"data frame 34 observations following 7 variables. group factor levels Control Diet DietEx. wl1 Weight loss 1 month wl2 Weight loss 2 months wl3 Weight loss 3 months se1 Self esteem 1 month se2 Self esteem 2 months se3 Self esteem 3 months","code":""},{"path":"https://friendly.github.io/heplots/reference/WeightLoss.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Weight Loss Data — WeightLoss","text":"Originally taken http://www.csun.edu/~ata20315/psy524/main.htm, modified slightly","code":""},{"path":"https://friendly.github.io/heplots/reference/WeightLoss.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Weight Loss Data — WeightLoss","text":"Helmert contrasts assigned group, comparing Control vs. (Diet DietEx) Diet vs. DietEx.","code":""},{"path":"https://friendly.github.io/heplots/reference/WeightLoss.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Weight Loss Data — WeightLoss","text":"Friendly, Michael (2010). Plots Repeated Measures Designs. Journal Statistical Software, 37(4), 1-40. doi:10.18637/jss.v037.i04 .","code":""},{"path":"https://friendly.github.io/heplots/reference/WeightLoss.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Weight Loss Data — WeightLoss","text":"","code":"data(WeightLoss) str(WeightLoss) #> 'data.frame':\t34 obs. of 7 variables: #> $ group: Factor w/ 3 levels \"Control\",\"Diet\",..: 1 1 1 1 1 1 1 1 1 1 ... #> ..- attr(*, \"contrasts\")= num [1:3, 1:2] -2 1 1 0 -1 1 #> .. ..- attr(*, \"dimnames\")=List of 2 #> .. .. ..$ : chr [1:3] \"Control\" \"Diet\" \"DietEx\" #> .. .. ..$ : NULL #> $ wl1 : int 4 4 4 3 5 6 6 5 5 3 ... #> $ wl2 : int 3 4 3 2 3 5 5 4 4 3 ... #> $ wl3 : int 3 3 1 1 2 4 4 1 1 2 ... #> $ se1 : int 14 13 17 11 16 17 17 13 14 14 ... #> $ se2 : int 13 14 12 11 15 18 16 15 14 15 ... #> $ se3 : int 15 17 16 12 14 18 19 15 15 13 ... table(WeightLoss$group) #> #> Control Diet DietEx #> 12 12 10 contrasts(WeightLoss$group) <- matrix(c(-2,1,1, 0, -1, 1),ncol=2) (wl.mod<-lm(cbind(wl1,wl2,wl3,se1,se2,se3)~group, data=WeightLoss)) #> #> Call: #> lm(formula = cbind(wl1, wl2, wl3, se1, se2, se3) ~ group, data = WeightLoss) #> #> Coefficients: #> wl1 wl2 wl3 se1 se2 se3 #> (Intercept) 5.34444 4.45000 2.17778 14.92778 13.79444 16.28333 #> group1 0.42222 0.55833 0.04722 0.08889 -0.26944 0.60000 #> group2 0.43333 1.09167 -0.02500 0.18333 -0.22500 0.71667 #> heplot(wl.mod, hypotheses=c(\"group1\", \"group2\")) pairs(wl.mod, variables=1:3) pairs(wl.mod, variables=4:6) # within-S variables within <- data.frame(measure=rep(c(\"Weight loss\", \"Self esteem\"),each=3), month=rep(ordered(1:3),2)) # doubly-multivariate analysis: requires car 2.0+ if (FALSE) { imatrix <- matrix(c( 1,0,-1, 1, 0, 0, 1,0, 0,-2, 0, 0, 1,0, 1, 1, 0, 0, 0,1, 0, 0,-1, 1, 0,1, 0, 0, 0,-2, 0,1, 0, 0, 1, 1), 6, 6, byrow=TRUE) # NB: for heplots the columns of imatrix should have names colnames(imatrix) <- c(\"WL\", \"SE\", \"WL.L\", \"WL.Q\", \"SE.L\", \"SE.Q\") rownames(imatrix) <- colnames(WeightLoss)[-1] (imatrix <- list(measure=imatrix[,1:2], month=imatrix[,3:6])) contrasts(WeightLoss$group) <- matrix(c(-2,1,1, 0,-1,1), ncol=2) (wl.mod<-lm(cbind(wl1, wl2, wl3, se1, se2, se3)~group, data=WeightLoss)) (wl.aov <- car::Anova(wl.mod, imatrix=imatrix, test=\"Roy\")) heplot(wl.mod, imatrix=imatrix, iterm=\"group:measure\") } # do the correct analysis 'manually' unit <- function(n, prefix=\"\") { J <-matrix(rep(1, n), ncol=1) rownames(J) <- paste(prefix, 1:n, sep=\"\") J } measure <- kronecker(diag(2), unit(3, 'M')/3, make.dimnames=TRUE) colnames(measure)<- c('WL', 'SE') between <- as.matrix(WeightLoss[,-1]) %*% measure between.mod <- lm(between ~ group, data=WeightLoss) car::Anova(between.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> group 2 0.26266 2.3434 4 62 0.06451 . #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(between.mod, hypotheses=c(\"group1\", \"group2\"), xlab=\"Weight Loss\", ylab=\"Self Esteem\", col=c(\"red\", \"blue\", \"brown\"), main=\"Weight Loss & Self Esteem: Group Effect\") month <- kronecker(diag(2), poly(1:3), make.dimnames=TRUE) colnames(month)<- c('WL', 'SE') trends <- as.matrix(WeightLoss[,-1]) %*% month within.mod <- lm(trends ~ group, data=WeightLoss) car::Anova(within.mod) #> #> Type II MANOVA Tests: Pillai test statistic #> Df test stat approx F num Df den Df Pr(>F) #> group 2 0.34305 3.2091 4 62 0.0185 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 heplot(within.mod) heplot(within.mod, hypotheses=c(\"group1\", \"group2\"), xlab=\"Weight Loss\", ylab=\"Self Esteem\", type=\"III\", remove.intercept=FALSE, term.labels=c(\"month\", \"group:month\"), main=\"Weight Loss & Self Esteem: Within-S Effects\") mark.H0()"},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-163-2024-03-05","dir":"Changelog","previous_headings":"","what":"Version 1.6.3 (2024-03-05)","title":"Version 1.6.3 (2024-03-05)","text":"Correct documentation error cqplot() cqplot() now returns DSQ values identified points Fixed small buglet re: labeling hypothesis ellipses heplot() Added new example (AddHealth data) HE_manova vignette","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-162-2024-02-14","dir":"Changelog","previous_headings":"","what":"Version 1.6.2 (2024-02-14)","title":"Version 1.6.2 (2024-02-14)","text":"CRAN release: 2024-02-15 Add peng dataset, version palmerpenguins::penguins Correct documentation problems Roxygen 7.3.1 (@docType)","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-161-2023-12-05","dir":"Changelog","previous_headings":"","what":"Version 1.6.1 (2023-12-05)","title":"Version 1.6.1 (2023-12-05)","text":"add warning label.ellipse() length(label.pos) > 1 fixed label.pos coefplot.mlm() add ellipse.axes() draw axes covariance ellipse add ellipse.box() draw conjugate axes covariance ellipse","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-160-2023-08-30","dir":"Changelog","previous_headings":"","what":"Version 1.6.0 (2023-08-30)","title":"Version 1.6.0 (2023-08-30)","text":"CRAN release: 2023-09-05 converted pkg roxygen documentation now Suggests: car rather Depends: fix CITATION authors","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-150-2023-05-30","dir":"Changelog","previous_headings":"","what":"Version 1.5.0 (2023-05-30)","title":"Version 1.5.0 (2023-05-30)","text":"covEllipses() gains formula method Internal function ellipsoid() used heplot3d() becomes (experimental) exported function, Ellipsoid()","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-14-3-2023-01-02","dir":"Changelog","previous_headings":"","what":"Version 1.4-3 (2023-01-02)","title":"Version 1.4-3 (2023-01-02)","text":"replace rgl.pop() pop3D (PR #7); thx: D. Murdoch","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-14-2-2022-10-09","dir":"Changelog","previous_headings":"","what":"Version 1.4-2 (2022-10-09)","title":"Version 1.4-2 (2022-10-09)","text":"CRAN release: 2022-10-19 Fix CITATION","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-14-1-2022-10-01","dir":"Changelog","previous_headings":"","what":"Version 1.4-1 (2022-10-01)","title":"Version 1.4-1 (2022-10-01)","text":"CRAN release: 2022-10-01 (Ugh) broom becomes Depend: override broom::glance()","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-14-0-2022-09-26","dir":"Changelog","previous_headings":"","what":"Version 1.4-0 (2022-09-26)","title":"Version 1.4-0 (2022-09-26)","text":"Added Iwasaki_Big_Five data [Thx: James Grice] Added cex.label arg heplot3d() Convert old Rnw vignettes Rmd Fix documentation infelicities Added TIPI data Added glance.mlm() extension broom::glance.lm()","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-9-2021-10-06","dir":"Changelog","previous_headings":"","what":"Version 1.3-9 (2021-10-06)","title":"Version 1.3-9 (2021-10-06)","text":"CRAN release: 2021-10-06 Fix potential problem URL links JSS articles, now converted DOIs","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-8","dir":"Changelog","previous_headings":"","what":"Version 1.3-8","title":"Version 1.3-8","text":"CRAN release: 2021-01-21 fix CRAN nit re rgl examples","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-7","dir":"Changelog","previous_headings":"","what":"Version 1.3-7","title":"Version 1.3-7","text":"CRAN release: 2020-10-28 Fix rendering 3D heplots [Thx: Duncan Murdoch] Fix URLs","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-6-2019-03-26","dir":"Changelog","previous_headings":"","what":"Version 1.3-6 (2019-03-26)","title":"Version 1.3-6 (2019-03-26)","text":"add mathscore data fix bug etasq.lm() per #1 [thx: Phil Chalmers] bump pkg version remove Suggests: FRB","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-5-2018-04-02","dir":"Changelog","previous_headings":"","what":"Version 1.3-5 (2018-04-02)","title":"Version 1.3-5 (2018-04-02)","text":"CRAN release: 2018-04-03 fix references car datasets -> carData fix error resulting car 3.0 changes bump pkg version","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-4-2016-11-7","dir":"Changelog","previous_headings":"","what":"Version 1.3-4 (2016-11-7)","title":"Version 1.3-4 (2016-11-7)","text":"CRAN release: 2017-09-15 Added Diabetes data, nice example heterogeneity covariances","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-3-2016-10-21","dir":"Changelog","previous_headings":"","what":"Version 1.3-3 (2016-10-21)","title":"Version 1.3-3 (2016-10-21)","text":"CRAN release: 2016-10-21 Added Parenting data, simple one-way MANOVA design (used TQMP paper) Prepare CRAN release","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-1-2016-06-10","dir":"Changelog","previous_headings":"","what":"Version 1.3-1 (2016-06-10)","title":"Version 1.3-1 (2016-06-10)","text":"CRAN release: 2016-06-14 added plot.robmlm(), plot method “robmlm” objects. Currently, plots weights given observations last iteration index plot. Re-built vignettes","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-13-0-2016-06-03","dir":"Changelog","previous_headings":"","what":"Version 1.3-0 (2016-06-03)","title":"Version 1.3-0 (2016-06-03)","text":"CRAN release: 2016-06-04 cqplot, pch, col, cex can now vectors Bump version, prepare release","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-12-1-2016-05-19","dir":"Changelog","previous_headings":"","what":"Version 1.2-1 (2016-05-19)","title":"Version 1.2-1 (2016-05-19)","text":"coefplot.mlm(), now pass label.pos label.ellipse() added Mahalanobis() classical robust squared distances; handles missing data gracefully provides confidence envelope added SocialCog data [Thx: Leah Hartman] added cqplot() Mahalanobis distances plot method mlm multivariate data","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-12-0-2016-04-27","dir":"Changelog","previous_headings":"","what":"Version 1.2-0 (2016-04-27)","title":"Version 1.2-0 (2016-04-27)","text":"CRAN release: 2016-05-19 covEllipses() extended two variables, giving scatterplot matrix plot plot.boxM() now can plot measures eigenvalues covariance matrices, useful understanding properties test. added bartlettTests() collection univariate Bartlett tests added leveneTests() collection univariate Levene tests added NeuroCog data, simple one-way MANOVA [Thx: Leah Hartman] label.ellipse() now uses much flexible label.pos argument positioning text labels used heplot() friends.","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-11-0-2016-03-03","dir":"Changelog","previous_headings":"","what":"Version 1.1-0 (2016-03-03)","title":"Version 1.1-0 (2016-03-03)","text":"CRAN release: 2016-03-26 Added boXM biotools Fleshed boxM() formula, lm, plot summary methods added plot.boxM() method Added covEllipses() methods plotting (possibly robust) covariance ellipses Added colDevs() utility use multivariate tests. Added data(AddHealth), simple example one-way MANOVA nice views [thx: Russell Warne] summary.boxM() now returns calculated statistics can used construct kinds plots. plot.boxM() gets gplabel argument provide label group factor pairs.mlm() gets var.cex argument control size variable labels Added logdetCI() confidence intervals log determinants covariance matrices (experimental) Now use logdetCI() plot.boxM()","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-16-2015-07-11","dir":"Changelog","previous_headings":"","what":"Version 1.0-16 (2015-07-11)","title":"Version 1.0-16 (2015-07-11)","text":"CRAN release: 2015-07-13 use importsFrom base packages","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-15-2015-04-15","dir":"Changelog","previous_headings":"","what":"Version 1.0-15 (2015-04-15)","title":"Version 1.0-15 (2015-04-15)","text":"CRAN release: 2015-04-18 Fix require -> requireNamespace","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-14-2015-02-15","dir":"Changelog","previous_headings":"","what":"Version 1.0-14 (2015-02-15)","title":"Version 1.0-14 (2015-02-15)","text":"Updated broken urls documentation Removed vcov.mlm exports conform CRAN policies Now use rgl:: rgl functions *3d.R Removed robmlm.default, robmlm.formula exports Imports: rgl","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-12-2014-05-15","dir":"Changelog","previous_headings":"","what":"Version 1.0-12 (2014-05-15)","title":"Version 1.0-12 (2014-05-15)","text":"CRAN release: 2014-07-02 Removed Authors: satisfy CRAN nits Fixed doc Hernior.Rd Now importsFrom(MASS) rather Depends:","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-11-2013-08-20","dir":"Changelog","previous_headings":"","what":"Version 1.0-11 (2013-08-20)","title":"Version 1.0-11 (2013-08-20)","text":"CRAN release: 2013-08-21 Cosmetic changes pass CRAN checks R 3.1.0, revised vcov.mlm() avoid calling summary.mlm() directly fixed long lines .Rd files R 3.0.1 checks removed require() calls MASS & car (Depends:) removed ::: calls car stats","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-10-2013-06-03","dir":"Changelog","previous_headings":"","what":"Version 1.0-10 (2013-06-03)","title":"Version 1.0-10 (2013-06-03)","text":"Added demo/-.R, exploring representations plots","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-9-2013-04-19","dir":"Changelog","previous_headings":"","what":"Version 1.0-9 (2013-04-19)","title":"Version 1.0-9 (2013-04-19)","text":"Added Pottery2 data, extending car::Pottery Fixed heplot3d minimize striated rendering ellipsoids, also modified default colors fill.alpha","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-8-2013-02-22","dir":"Changelog","previous_headings":"","what":"Version 1.0-8 (2013-02-22)","title":"Version 1.0-8 (2013-02-22)","text":"CRAN release: 2013-04-11 heplot.mlm(), added … label.ellipse able pass cex= Added NLSY data examples testing linearHypotheses heplot3d(), rgl.* functions replaced *3d() equivalents Extended gsorth description examples","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-7-2013-02-07","dir":"Changelog","previous_headings":"","what":"Version 1.0-7 (2013-02-07)","title":"Version 1.0-7 (2013-02-07)","text":"CRAN release: 2013-02-08 Made heplot3d() examples reduce example execution time satisfy CRAN nits","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-6-2013-01-14","dir":"Changelog","previous_headings":"","what":"Version 1.0-6 (2013-01-14)","title":"Version 1.0-6 (2013-01-14)","text":"Added label.ellipse() general exported function. heplot() gets label.pos= argument allowing flexible labeling, label position specified (bottom, left, top, right center) Added coefplot S3 generic coefplot.mlm method plot ellipses mlm coefficients. generalizes car::confidenceEllipse mlm setting.","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-4-2012-12-29","dir":"Changelog","previous_headings":"","what":"Version 1.0-4 (2012-12-29)","title":"Version 1.0-4 (2012-12-29)","text":"Added interpPlot plotting interpolations two data sets, data ellipses, etc. Main use animated demos multivariate statistical concepts. interpPlot gains add=, points= col= arguments greater control graphical parameters.","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-2-2012-12-05","dir":"Changelog","previous_headings":"","what":"Version 1.0-2 (2012-12-05)","title":"Version 1.0-2 (2012-12-05)","text":"CRAN release: 2012-12-17 Added Schooldata example comparison mlm robmlm()","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-1-2012-10-18","dir":"Changelog","previous_headings":"","what":"Version 1.0-1 (2012-10-18)","title":"Version 1.0-1 (2012-10-18)","text":"Added simple robmlm methods robust MLMss print summary methods vcov.mlm method. allows heplot() related methods show robust plots.","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-10-0-2012-6-3","dir":"Changelog","previous_headings":"","what":"Version 1.0-0 (2012-6-3)","title":"Version 1.0-0 (2012-6-3)","text":"CRAN release: 2012-08-08 Added Olso data Corrected error demo/OBK.R","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-13-2012-5-18","dir":"Changelog","previous_headings":"","what":"Version 0.9-13 (2012-5-18)","title":"Version 0.9-13 (2012-5-18)","text":"Extended -examples vignette example based SocGrades data","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-12-2012-04-03","dir":"Changelog","previous_headings":"","what":"Version 0.9-12 (2012-04-03)","title":"Version 0.9-12 (2012-04-03)","text":"CRAN release: 2012-05-17 Added Skulls data Extended -examples vignette example based Skulls data Changed default colors heplot() heplot1d() allow global setting options(“heplot.colors”); similarly, heplot3d() now allows global option colors, options(“heplot3d.colors”), differing using pink error ellipsoid. Extended Hernior.Rd examples show 1D plots canonical space; added discussion example -examples vignette. Extended SocGrades.Rd examples show plots canonical space.","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-11-2012-01-12","dir":"Changelog","previous_headings":"","what":"Version 0.9-11 (2012-01-12)","title":"Version 0.9-11 (2012-01-12)","text":"CRAN release: 2012-02-12 Added Probe1, Probe2 data sets– repeated measures design Added Sake data","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-10-2011-09-12","dir":"Changelog","previous_headings":"","what":"Version 0.9-10 (2011-09-12)","title":"Version 0.9-10 (2011-09-12)","text":"CRAN release: 2011-10-17 Fixed Authors@R DESCRIPTION R 2.14.x Added var.labels argument pairs.mlm gsorth.R: Made sd() local function avoid deprecated warnings","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-9-2011-06-10","dir":"Changelog","previous_headings":"","what":"Version 0.9-9 (2011-06-10)","title":"Version 0.9-9 (2011-06-10)","text":"Added data(Hernior), another MMRA, cancorr example data set Added data(SocGrades), another MANOVA, MMRA, cancorr example data set Corrected buglet fill.alpha heplot","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-8-2011-04-8","dir":"Changelog","previous_headings":"","what":"Version 0.9-8 (2011-04-8)","title":"Version 0.9-8 (2011-04-8)","text":"CRAN release: 2011-05-21 Added MMRA example -examples vignette Added err.label argument heplot heplot3d allow changing label error ellipsoid","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-7-2010-11-4","dir":"Changelog","previous_headings":"","what":"Version 0.9-7 (2010-11-4)","title":"Version 0.9-7 (2010-11-4)","text":"o Added trans.colors() make colors transparent o Modifications heplot() filled ellipses: added fill= fill.alpha= arguments; replaced lines() polygon() H E ellipses; calculate H.rank distinguish degenerate ellipses o added last() utility.R o Modified examples show fill=TRUE use wire=FALSE heplot3d() o Modified pairs.mlm() pass fill= fill.alpha= heplot() o Updated reference URLs point datavis.ca o Fixed buglet gsorth matrix row/col names [Thx: mekki@mektek.ca] o Fixed buglet etasq.lm partial=FALSE [Thx: .e.holliday@aston.ac.uk] Version 0.9-6 (2010-11-2) o added CITATION JSS article references .Rd files o modified repeated vignette [nojss] Version 0.9-5 (2010-10-01) o Added repeated vignette Version 0.9-4 (2010-07-29) o Minor documentation changes o Added etasq.lm() method o Added data/MockJury - 1-way 2-way MANOVA, step-tests, ANCOVA o Generalized termMeans() exported o Added -examples vignette Version 0.9-3 (2010-07-27) o Added gsorth() Gram-Schmidt orthogonalization matrix data frame, preserving column means standard deviations o Avoid Deprecated warnings (linear.hypothesis) car2 o Fixed documentation warnings car2 (linear.hypothesis, data.ellipse) Version 0.9-2 (2010-02-12) o Added demo/Big5.R - Analysis scores ‘Big 5’ personality traits three groups o fixed buglet text3d causing rgl crash (thx: Duncan Murdoch) o switched inst/CHANGES NEWS o Added data/RatWeight examples - repeated measures Weight Gain Rats o Added data/Headache examples - repeated measures treatment headaches o Fixed buglets heplot, heplot1d, heplot3d regarding number variables o Added etasq.mlm methods multivariate measures association (^2) o Return ellipse radius heplot, heplot3d","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-1-2010-01-1","dir":"Changelog","previous_headings":"","what":"Version 0.9-1 (2010-01-1)","title":"Version 0.9-1 (2010-01-1)","text":"o heplot.mlm, pairs.mlm, heplot3d.mlm now work repeated measure designs covariates rhs. o Implemented heplot1d() repeated measures designs (untested) o Revised documentation repeated measures o Added center.cex heplot.mlm() o Revised mark.H0() handle 3D plots also o Added Adoption data – MMreg repeated measures o Added ReactTime data – 2 within-S, -S factors o Fixed bug icontrasts o Added markH0 argument heplot o Added label argument mark.H0() o Added arrow3d() o Fixed buglet pairs.mlm (type)","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-09-0-2009-12-25","dir":"Changelog","previous_headings":"","what":"Version 0.9-0 (2009-12-25)","title":"Version 0.9-0 (2009-12-25)","text":"o Implemented 2D plots heplot.mlm repeated measures designs adding idata=, idesign=, icontrasts= arguments. o imatrix= argument doubly-multivariate designs implemented, depends car 2.0+ o Updated example(OBK) o Updated example(WeightLoss) o Implemented 3D plots heplot3d.mlm repeated measures designs (OK) o Implemented pairs() repeated measures designs (OK)","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-11-2009-12-08","dir":"Changelog","previous_headings":"","what":"Version 0.8-11 (2009-12-08)","title":"Version 0.8-11 (2009-12-08)","text":"CRAN release: 2009-12-23 o Minor fixes heplot1d o Added contrasts example RootStock.Rd o Added WeightLoss data – doubly multivariate o Added mark.H0","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-10-2009-10-10","dir":"Changelog","previous_headings":"","what":"Version 0.8-10 (2009-10-10)","title":"Version 0.8-10 (2009-10-10)","text":"CRAN release: 2009-10-13 o Fixes cross-references .Rd files.","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-9-2009-06-19","dir":"Changelog","previous_headings":"","what":"Version 0.8-9 (2009-06-19)","title":"Version 0.8-9 (2009-06-19)","text":"CRAN release: 2009-07-23 o Added data(RootStock) o heplot.mlm, heplot3d.mlm now include center returned object","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-8-2009-06-04","dir":"Changelog","previous_headings":"","what":"Version 0.8-8 (2009-06-04)","title":"Version 0.8-8 (2009-06-04)","text":"o Added data(FootHead) o Extended example(FootHead) Version 0.8-7 (2009-04-17) o Initial version heplot1d o Added data(Bees), demo(bees.contrasts) o Now suggest: effects package","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-6-2009-04-11","dir":"Changelog","previous_headings":"","what":"Version 0.8-6 (2009-04-11)","title":"Version 0.8-6 (2009-04-11)","text":"CRAN release: 2009-04-19 o Added VocabGrowth data, example heplot() repeated measures design o Fixed label.ellipse heplot.mlm.R center label horizontally o Added demo(OBK) o Added axes= heplot.mlm fix warnings arising axes=FALSE pairs.mlm","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-5-2009-01-26","dir":"Changelog","previous_headings":"","what":"Version 0.8-5 (2009-01-26)","title":"Version 0.8-5 (2009-01-26)","text":"CRAN release: 2009-04-03 o Minor documentation changes Rdoc 2 o Michael Friendly maintainer","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-4-2008-11-17","dir":"Changelog","previous_headings":"","what":"Version 0.8-4 (2008-11-17)","title":"Version 0.8-4 (2008-11-17)","text":"CRAN release: 2008-11-18 o Documentation additions o added CITATION file","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-3-2008-11-6","dir":"Changelog","previous_headings":"","what":"Version 0.8-3 (2008-11-6)","title":"Version 0.8-3 (2008-11-6)","text":"Changes heplot3d.mlm: o added xlim, ylim, zlim arguments","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-2-2008-10-22","dir":"Changelog","previous_headings":"","what":"Version 0.8-2 (2008-10-22)","title":"Version 0.8-2 (2008-10-22)","text":"Package changes o added suggests: candisc o added utility.R, cross3d.R Changes heplot.mlm: o moved lambda.crit utility.R o added .rep handle common task repeating argument values Changes heplot3d.mlm: o added shade=, shade.alpha=, wire= parameters o fixed: grand.mean=FALSE respected o replaced sphere grand.mean cross3d() o color means according color term o return bounding boxes ellipsoids o replaced rgl.texts texts3d Changes utility.R: o Generalized lambda.crit provide Roy.crit HLT.crit; Roy.crit used","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-1-2007-05-23","dir":"Changelog","previous_headings":"","what":"Version 0.8-1 (2007-05-23)","title":"Version 0.8-1 (2007-05-23)","text":"CRAN release: 2008-11-03 o heplot now passes … plot() calls text() points().","code":""},{"path":"https://friendly.github.io/heplots/news/index.html","id":"version-08-0-2007-01-31","dir":"Changelog","previous_headings":"","what":"Version 0.8-0 (2007-01-31)","title":"Version 0.8-0 (2007-01-31)","text":"CRAN release: 2007-01-31 Initial version released CRAN.","code":""}] diff --git a/man/AddHealth.Rd b/man/AddHealth.Rd index ae7c9872..f6424632 100644 --- a/man/AddHealth.Rd +++ b/man/AddHealth.Rd @@ -3,7 +3,7 @@ \docType{data} \name{AddHealth} \alias{AddHealth} -\title{Adolescent Health Data} +\title{Adolescent Mental Health Data} \format{ A data frame with 4344 observations on the following 3 variables. \describe{ @@ -38,13 +38,44 @@ The responses for \code{depression} and \code{anxiety} were recorded on a \examples{ data(AddHealth) + +if(require(dplyr) & require(ggplot2)) { +# find means & std.errors by grade +means <- AddHealth |> +group_by(grade) |> + summarise( + n = n(), + dep_se = sd(depression, na.rm = TRUE) / sqrt(n), + anx_se = sd(anxiety, na.rm = TRUE) / sqrt(n), + depression = mean(depression), + anxiety = mean(anxiety) ) |> + relocate(depression, anxiety, .after = grade) |> + print() + +# plot means with std.error bars +ggplot(data = means, aes(x = anxiety, y = depression, +color = grade)) + + geom_point(size = 3) + + geom_errorbarh(aes(xmin = anxiety - anx_se, + xmax = anxiety + anx_se)) + + geom_errorbar(aes(ymin = depression - dep_se, + ymax = depression + dep_se)) + + geom_line(aes(group = 1), linewidth = 1.5) + + geom_label(aes(label = grade), + nudge_x = -0.015, nudge_y = 0.02) + + scale_color_discrete(guide = "none") + + theme_bw(base_size = 15) +} + # fit mlm -AH.mod <- lm(cbind(depression, anxiety) ~ grade, data=AddHealth) +AH.mod <- lm(cbind(anxiety, depression) ~ grade, data=AddHealth) car::Anova(AH.mod) summary(car::Anova(AH.mod)) -heplot(AH.mod, hypotheses="grade.L", fill=c(TRUE, FALSE)) +heplot(AH.mod, hypotheses="grade.L", + fill=c(TRUE, FALSE), + level = 0.4) } \keyword{datasets} diff --git a/man/Iwasaki_Big_Five.Rd b/man/Iwasaki_Big_Five.Rd index 5a204210..edb0c2dd 100644 --- a/man/Iwasaki_Big_Five.Rd +++ b/man/Iwasaki_Big_Five.Rd @@ -42,30 +42,46 @@ groups \examples{ data(Iwasaki_Big_Five) +# use Helmert contrasts for groups +contrasts(Iwasaki_Big_Five$Group) <- + matrix(c(2, -1, -1, + 0, -1, 1), ncol=2) + str(Iwasaki_Big_Five) -mod <- lm(cbind(N, E, O, A, C) ~ Group, data=Iwasaki_Big_Five) +Big5.mod <- lm(cbind(N, E, O, A, C) ~ Group, data=Iwasaki_Big_Five) +coef(Big5.mod) + +car::Anova(Big5.mod) -car::Anova(mod) +# test contrasts +car::linearHypothesis(Big5.mod, "Group1", title = "Eur vs Asian") +car::linearHypothesis(Big5.mod, "Group2", title = "Asian: Amer vs Inter") # heplots -labs <- c("Neuroticism", "Extraversion", "Openness", "Agreeableness", "Consientiousness" ) +labs <- c("Neuroticism", "Extraversion", "Openness", "Agreeableness", "Conscientiousness" ) -heplot(mod, +heplot(Big5.mod, fill = TRUE, fill.alpha = 0.2, cex.lab = 1.5, xlab = labs[1], ylab = labs[2]) -heplot(mod, variables = c(2,5), +heplot(Big5.mod, variables = c(2,5), fill = TRUE, fill.alpha = 0.2, cex.lab = 1.5, xlab = labs[2], ylab = labs[5]) -pairs(mod, +pairs(Big5.mod, fill = TRUE, fill.alpha = 0.2, var.labels = labs) - +# canonical discriminant analysis +if (require(candisc)) { +library(candisc) +Big5.can <- candisc(Big5.mod) +Big5.can +heplot(Big5.can, fill = TRUE, fill.alpha = 0.1) +} } \references{ Costa Jr, P. T., & McCrae, R. R. (1992). \emph{Revised NEO diff --git a/vignettes/fig/manova-addhealth-heplot-1.png b/vignettes/fig/manova-addhealth-heplot-1.png index 439751afb491920d40969f8028bc7941fb3889c2..8265e52d195b0c263dd3bfc0335ea78914b41df5 100644 GIT binary patch delta 6519 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 NYGi(?$N=~Be*nyJ+y4Ln delta 6496 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