Categorical covariate with two way anova in R - r

This is a random sample of my data set:
structure(list(DTI_ID = structure(c(31L, 241L, 84L, 298L, 185L,
269L, 198L, 24L, 286L, 177L, 228L, 158L, 57L, 293L, 218L, 8L,
180L, 39L, 211L, 134L, 291L, 309L, 99L, 70L, 154L, 138L, 250L,
41L, 276L, 262L, 96L, 139L, 232L, 12L, 294L, 38L, 244L, 289L,
280L, 196L, 58L, 44L, 188L, 152L, 143L, 302L, 201L, 27L, 24L,
67L, 247L, 223L, 74L, 32L, 110L, 98L, 303L, 256L, 71L, 30L, 236L,
266L, 307L, 224L, 100L, 73L, 288L, 230L, 182L, 159L, 190L, 123L,
241L, 169L, 103L, 40L, 248L, 293L, 60L, 260L, 168L, 267L, 144L,
89L, 139L, 231L, 204L, 130L, 278L, 227L, 205L, 268L, 88L, 221L,
208L, 306L, 242L, 145L, 21L, 165L, 217L, 159L, 206L, 70L, 121L,
181L, 95L, 279L, 265L, 4L, 122L, 177L, 234L, 34L, 261L, 86L,
2L, 296L, 39L, 283L, 251L, 126L, 188L, 176L, 220L, 77L, 225L,
73L, 48L, 107L, 280L, 118L, 38L, 310L, 297L, 258L, 89L, 205L,
4L, 54L, 16L, 95L, 119L, 40L, 9L, 66L, 64L, 55L, 131L, 290L,
166L, 170L, 182L, 139L, 125L, 201L, 302L, 137L, 8L, 81L, 61L,
119L, 278L, 135L, 117L, 65L, 21L, 200L, 150L, 146L, 54L, 262L,
152L, 224L, 162L, 111L, 251L, 130L, 41L, 271L, 33L, 86L, 32L,
199L, 49L, 180L, 101L, 271L, 80L, 84L, 293L, 5L, 170L, 74L, 279L,
281L, 255L, 210L, 52L, 248L, 53L, 121L, 190L, 141L, 213L, 138L,
112L, 234L, 235L, 40L, 233L, 115L, 154L, 11L, 76L, 29L, 19L,
249L, 1L, 207L), .Label = c("5356", "5357", "5358", "5359", "5360",
"5363", "5373", "5381", "5383", "5386", "5395", "5397", "5400",
"5401", "5444", "5445", "5446", "5448", "5450", "5451", "5454",
"5472", "5473", "5475", "5476", "5477", "5478", "5480", "5481",
"5483", "5487", "5494", "5495", "5504", "5505", "5506", "5507",
"5508", "5509", "5513", "5514", "5515", "5516", "5517", "5518",
"5519", "5521", "5523", "5524", "5526", "5527", "5528", "5544",
"5545", "5546", "5547", "5551", "5552", "5553", "5554", "5555",
"5558", "5559", "5560", "5562", "5564", "5566", "5573", "5574",
"5575", "5576", "5577", "5578", "5579", "5584", "5585", "5587",
"5588", "5589", "5591", "5594", "5595", "5604", "5611", "5612",
"5613", "5615", "5616", "5619", "5620", "5621", "5622", "5626",
"5627", "5628", "5631", "5632", "5634", "5635", "5643", "5652",
"5653", "5654", "5655", "5656", "5657", "5659", "5660", "5661",
"5664", "5665", "5666", "5669", "5671", "5672", "5673", "5678",
"5680", "5688", "5689", "5690", "5691", "5692", "5698", "5699",
"5700", "5702", "5703", "5704", "5706", "5708", "5709", "5710",
"5730", "5731", "5732", "5733", "5734", "5735", "5739", "5740",
"5741", "5742", "5743", "5744", "5745", "5746", "5747", "5748",
"5749", "5750", "5753", "5754", "5755", "5766", "5767", "5776",
"5777", "5778", "5779", "5780", "5781", "5787", "5788", "5789",
"5790", "5791", "5792", "5793", "5797", "5798", "5799", "5800",
"5801", "5810", "5811", "5812", "5813", "5814", "5819", "5820",
"5821", "5822", "5823", "5824", "5825", "5827", "5828", "5829",
"5830", "5857", "5859", "5874", "5875", "5876", "5877", "5878",
"5879", "5883", "5884", "5886", "5887", "5888", "5889", "5890",
"5892", "5893", "5896", "5899", "5900", "5909", "5910", "5918",
"5919", "5920", "5921", "5922", "5923", "5927", "5929", "5931",
"5932", "5933", "5934", "5936", "5937", "5941", "5943", "5944",
"5949", "5950", "5951", "5952", "5956", "5957", "5958", "5959",
"5971", "5972", "5973", "5976", "5979", "5980", "5981", "6001",
"6002", "6003", "6004", "6005", "6009", "6027", "6028", "6033",
"6042", "6054", "6063", "6067", "6073", "6076", "6077", "6078",
"6079", "6080", "6081", "6082", "6083", "6098", "6102", "6103",
"6104", "6105", "6106", "6107", "6111", "6119", "6133", "6146",
"6147", "6157", "6158", "6160", "6161", "6162", "6163", "6164",
"6165", "6166", "6167", "6168", "6169", "6170", "6171", "6172",
"6173", "6174", "6175", "6190", "6193", "6195", "6196", "6197",
"6208", "6228", "6229", "6232", "6255", "6268", "6269", "6270",
"6275"), class = "factor"), Gender = structure(c(2L, 2L, 1L,
2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L,
1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 1L,
2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L,
2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L,
1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L,
2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L,
2L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L), .Label = c("Female", "Male"
), class = "factor"), Age = structure(c(2L, 1L, 2L, 2L, 2L, 2L,
1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L,
1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L,
2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L,
2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 2L, 2L), .Label = c("Young", "Old"), class = "factor"),
ROI = structure(c(4L, 4L, 1L, 2L, 3L, 3L, 3L, 2L, 2L, 1L,
3L, 2L, 4L, 1L, 1L, 2L, 4L, 4L, 1L, 4L, 4L, 4L, 1L, 1L, 4L,
2L, 1L, 2L, 2L, 2L, 4L, 1L, 1L, 3L, 3L, 3L, 4L, 3L, 1L, 4L,
2L, 2L, 3L, 4L, 2L, 2L, 1L, 2L, 3L, 1L, 4L, 4L, 3L, 4L, 4L,
1L, 3L, 4L, 3L, 3L, 1L, 3L, 1L, 1L, 1L, 4L, 2L, 1L, 4L, 3L,
2L, 2L, 3L, 4L, 1L, 2L, 1L, 4L, 2L, 1L, 3L, 1L, 2L, 2L, 4L,
1L, 1L, 4L, 4L, 3L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 4L, 4L, 1L,
2L, 4L, 1L, 2L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 4L, 3L, 2L, 4L,
1L, 1L, 3L, 3L, 3L, 1L, 2L, 4L, 3L, 4L, 1L, 4L, 3L, 2L, 1L,
4L, 4L, 4L, 2L, 4L, 1L, 4L, 2L, 1L, 3L, 1L, 2L, 3L, 3L, 3L,
1L, 1L, 2L, 4L, 4L, 1L, 4L, 1L, 3L, 3L, 4L, 1L, 3L, 4L, 2L,
2L, 1L, 1L, 1L, 1L, 4L, 1L, 4L, 1L, 4L, 2L, 4L, 3L, 3L, 3L,
2L, 2L, 2L, 1L, 4L, 4L, 3L, 3L, 4L, 3L, 1L, 4L, 2L, 2L, 3L,
2L, 3L, 1L, 2L, 3L, 2L, 1L, 3L, 3L, 2L, 4L, 1L, 1L, 2L, 1L,
4L, 4L, 1L, 2L, 1L, 2L, 4L, 2L, 4L, 1L, 4L, 2L, 4L, 3L, 2L
), .Label = c("A", "B","C", "D"), class = "factor"),
value = c(0.326713741, 0.349206239, 0.365954667,
0.313958377, 0.480487555, 0.431199849, 0.446729183, 0.337009728,
0.331222087, 0.386937141, 0.372758657, 0.305083066, 0.504718482,
0.414191663, 0.40949735, 0.271525055, 0.30009532, 0.50117749,
0.387669057, 0.330797315, 0.390679717, 0.452181876, 0.423188657,
0.396808296, 0.388510793, 0.298505336, 0.412985921, 0.327000797,
0.304242313, 0.277513236, 0.394773901, 0.4322685, 0.440891623,
0.439061254, 0.453015536, 0.385896087, 0.452299237, 0.296923041,
0.443324417, 0.420699686, 0.282610774, 0.303566545, 0.535346806,
0.393591255, 0.32561186, 0.309230596, 0.417596817, 0.281766504,
0.445347071, 0.353419632, 0.354420125, 0.429613769, 0.385733992,
0.155136898, 0.485385537, 0.439544022, 0.436584443, 0.458706915,
0.600399196, 0.440390527, 0.362952292, 0.37253055, 0.37306264,
0.371298164, 0.469741255, 0.573943496, 0.283266962, 0.391182601,
0.663566113, 0.517713368, 0.327498972, 0.353969425, 0.443648636,
0.449972481, 0.434426159, 0.305042148, 0.422493547, 0.194572225,
0.331083208, 0.418288261, 0.447215647, 0.429001331, 0.339149892,
0.336879104, 0.471237898, 0.408330619, 0.393405557, 0.486086488,
0.427713692, 0.379242182, 0.40456596, 0.326695889, 0.393235713,
0.452374548, 0.332855165, 0.323469192, 0.396484613, 0.372199923,
0.257353246, 0.405249774, 0.326494843, 0.420468688, 0.335335255,
0.267627925, 0.379383296, 0.338241786, 0.416064918, 0.381003618,
0.284006208, 0.442705005, 0.494199812, 0.464447916, 0.370418996,
0.293953657, 0.34482345, 0.47208631, 0.378798842, 0.407261223,
0.34767586, 0.424341202, 0.434532404, 0.342623293, 0.628901243,
0.381492049, 0.540111601, 0.392371207, 0.459349483, 0.373172134,
0.270272404, 0.413454324, 0.375994682, 0.470298111, 0.340463549,
0.31613645, 0.470312864, 0.410651028, 0.276164204, 0.341546267,
0.402167588, 0.465735435, 0.434102625, 0.328114063, 0.394582212,
0.331681252, 0.387562275, 0.3989245, 0.44939962, 0.29586333,
0.398924828, 0.559520543, 0.392099082, 0.589552164, 0.397368163,
0.375135392, 0.348508835, 0.447002649, 0.407775551, 0.404435992,
0.666776299, 0.265039146, 0.25311482, 0.354386091, 0.44051528,
0.416727781, 0.460624784, 0.455415428, 0.445090771, 0.502343714,
0.393426061, 0.463244319, 0.345586747, 0.291874498, 0.564393103,
0.400276631, 0.41512531, 0.308440536, 0.373545259, 0.272377819,
0.434890926, 0.358394623, 0.414819628, 0.761894882, 0.409700364,
0.403811544, 0.469092041, 0.397044837, 0.312479883, 0.294876397,
0.314414322, 0.428720832, 0.329074681, 0.311423391, 0.444689006,
0.254723012, 0.248710752, 0.270434052, 0.416304022, 0.38875562,
0.396840513, 0.296386898, 0.454476953, 0.474986047, 0.427072734,
0.270839244, 0.426266223, 0.586857438, 0.348018169, 0.386638522,
0.349321723, 0.418692261, 0.295630395, 0.463439822, 0.286190838,
0.336389571, 0.422766507, 0.231764346, 0.358636618, 0.562871873,
0.381515294, 0.28637746)), row.names = c(961L, 1171L, 84L,
608L, 805L, 889L, 818L, 334L, 596L, 177L, 848L, 468L, 987L, 293L,
218L, 318L, 1110L, 969L, 211L, 1064L, 1221L, 1239L, 99L, 70L,
1084L, 448L, 250L, 351L, 586L, 572L, 1026L, 139L, 232L, 632L,
914L, 658L, 1174L, 909L, 280L, 1126L, 368L, 354L, 808L, 1082L,
453L, 612L, 201L, 337L, 644L, 67L, 1177L, 1153L, 694L, 962L,
1040L, 98L, 923L, 1186L, 691L, 650L, 236L, 886L, 307L, 224L,
100L, 1003L, 598L, 230L, 1112L, 779L, 500L, 433L, 861L, 1099L,
103L, 350L, 248L, 1223L, 370L, 260L, 788L, 267L, 454L, 399L,
1069L, 231L, 204L, 1060L, 1208L, 847L, 205L, 578L, 88L, 221L,
518L, 616L, 242L, 1075L, 951L, 165L, 527L, 1089L, 206L, 380L,
431L, 801L, 1025L, 279L, 575L, 624L, 1052L, 1107L, 854L, 344L,
1191L, 86L, 2L, 916L, 659L, 903L, 251L, 436L, 1118L, 796L, 1150L,
77L, 1155L, 693L, 358L, 107L, 1210L, 1048L, 968L, 620L, 1227L,
258L, 1019L, 515L, 4L, 674L, 16L, 405L, 739L, 660L, 629L, 66L,
64L, 365L, 1061L, 1220L, 166L, 1100L, 182L, 759L, 745L, 1131L,
302L, 757L, 938L, 391L, 371L, 119L, 278L, 135L, 117L, 995L, 21L,
1130L, 150L, 1076L, 364L, 1192L, 772L, 844L, 782L, 421L, 561L,
440L, 41L, 1201L, 963L, 706L, 652L, 1129L, 669L, 180L, 1031L,
581L, 390L, 704L, 603L, 625L, 170L, 384L, 899L, 591L, 255L, 830L,
672L, 558L, 983L, 121L, 190L, 451L, 213L, 1068L, 1042L, 234L,
545L, 40L, 543L, 1045L, 464L, 941L, 76L, 959L, 329L, 1179L, 621L,
517L), class = "data.frame")
Which looks like:
# A tibble: 10 x 5
DTI_ID Gender Age ROI value
<fct> <fct> <fct> <fct> <dbl>
1 5927 Male Old A 0.395
2 5634 Male Old C 0.433
3 5547 Female Old B 0.257
4 5979 Male Old C 0.404
5 5660 Male Old A 0.398
6 5876 Female Old D 0.426
7 5518 Male Old A 0.404
8 6001 Female Old D 0.392
9 6042 Male Old A 0.388
10 5821 Male Old A 0.344
ROI is a region of interest within each subject, so all subjects have all 4 ROIs.
I would like to calculate a 2-way ANCOVA 4(ROIs [a/b/c/d] - within) x 2 (Age [young/old] - between) + Gender [covariate] to determine the interaction effects of age and ROI on value, controlling for Gender.
To do that, I calculated:
#2-way ANOVA
res.aov2 <- df %>%
anova_test(value ~ Gender + Age*ROI, within = ROI, wid= DTI_ID)
get_anova_table(res.aov2)
which works fine and outputs:
ANOVA Table (type II tests)
Effect DFn DFd F p p<.05 ges
1 Gender 1 1227 5.196 2.30e-02 * 0.004000
2 Age 1 1227 0.732 3.92e-01 0.000596
3 ROI 3 1227 228.933 6.13e-118 * 0.359000
4 Age:ROI 3 1227 22.258 4.90e-14 * 0.052000
I then want to run a multiple comparisons to generate p values that I can graph over boxplots for visualization of the analyses.
I am using emmeans_test:
# Pairwise comparisons
pwc2 <- df %>%
group_by(ROI) %>%
emmeans_test(value ~ Age, covariate = Gender,
p.adjust.method = "bonferroni")
but receive the error:
Error in contrast.emmGrid(res.emmeans, by = grouping.vars, method = method, : Nonconforming number of contrast coefficients
I cannot figure out why, as the pairwise comparison works fine when I remove the covariate. Does it have to do with a categorical variable being used as a covariate? I am stuck and want to make sure I am reporting the appropriate p-values in my chart.

Adding Gender to group_by as well, allowed the code to run properly.

Related

ggplot2 add breaks/intervals to discrete variable in an animated plot

Context: I'm trying to make an animated line plot where I compare the levels of Resting Blood Pressure (Y variable - The graph says cholesterol, but it should say Resting Blood Pressure) as the Age increases (x variable) in function of the patient having heart disease or not (0 for no heart disease and 1 for heart disease).
The plot has a lot of "spikes," so I'd like to create some classes/breaks to level things out a bit, but I'm not sure how I could do it given that age is a discrete variable. I was trying to add something like scale_x_discrete() and then adding a sequence like seq(10,80,10) but it didn't work. I was also taking a look at using cut with Sturges rules, but once again that's used for continuous variables.
This is the code:
p <- ggplot(
df,
aes(Age, RestingBP, group = HeartDisease, color = HeartDisease)
) +
geom_line() +
scale_color_viridis_d() +
scale_alpha_manual(values=classes) +
labs(x = "Age", y = "Cholesterol") +
theme(legend.position = "top")
p + transition_reveal(Age)
This is the graph:
Thank you in advance!
Some data:
structure(list(Age = c(40L, 49L, 37L, 48L, 54L, 39L, 45L, 54L,
37L, 48L, 37L, 58L, 39L, 49L, 42L, 54L, 38L, 43L, 60L, 36L, 43L,
44L, 49L, 44L, 40L, 36L, 53L, 52L, 53L, 51L, 53L, 56L, 54L, 41L,
43L, 32L, 65L, 41L, 48L, 48L, 54L, 54L, 35L, 52L, 43L, 59L, 37L,
50L, 36L, 41L), Gr_etario = structure(c(2L, 2L, 1L, 2L, 2L, 1L,
2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 3L, 1L, 2L, 2L,
2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 3L, 2L,
2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L), .Label = c("Menos de 40 anos",
"Entre 40 e 60 anos", "Acima de 60 anos"), class = "factor"),
Sex = structure(c(2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L,
1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 2L,
2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("F",
"M"), class = "factor"), ChestPainType = structure(c(2L,
3L, 2L, 1L, 3L, 3L, 2L, 2L, 1L, 2L, 3L, 2L, 2L, 1L, 3L, 2L,
1L, 2L, 1L, 2L, 4L, 2L, 2L, 2L, 3L, 3L, 1L, 2L, 2L, 2L, 3L,
3L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 3L, 2L, 3L, 1L, 3L,
1L, 2L, 3L, 1L), .Label = c("ASY", "ATA", "NAP", "TA"), class = "factor"),
RestingBP = c(140L, 160L, 130L, 138L, 150L, 120L, 130L, 110L,
140L, 120L, 130L, 136L, 120L, 140L, 115L, 120L, 110L, 120L,
100L, 120L, 100L, 120L, 124L, 150L, 130L, 130L, 124L, 120L,
113L, 125L, 145L, 130L, 125L, 130L, 150L, 125L, 140L, 110L,
120L, 150L, 150L, 130L, 150L, 140L, 120L, 130L, 120L, 140L,
112L, 110L), Cholesterol = c(289, 180, 283, 214, 195, 339,
237, 208, 207, 284, 211, 164, 204, 234, 211, 273, 196, 201,
248, 267, 223, 184, 201, 288, 215, 209, 260, 284, 468, 188,
518, 167, 224, 172, 186, 254, 306, 250, 177, 227, 230, 294,
264, 259, 175, 318, 223, 216, 340, 289), FastingBS = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L), .Label = c("0", "1"), class = "factor"),
RestingECG = structure(c(2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L,
3L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("LVH",
"Normal", "ST"), class = "factor"), MaxHR = c(172L, 156L,
98L, 108L, 122L, 170L, 170L, 142L, 130L, 120L, 142L, 99L,
145L, 140L, 137L, 150L, 166L, 165L, 125L, 160L, 142L, 142L,
164L, 150L, 138L, 178L, 112L, 118L, 127L, 145L, 130L, 114L,
122L, 130L, 154L, 155L, 87L, 142L, 148L, 130L, 130L, 100L,
168L, 170L, 120L, 120L, 168L, 170L, 184L, 170L), ExerciseAngina = structure(c(1L,
1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L,
1L, 1L, 1L, 1L), .Label = c("N", "Y"), class = "factor"),
Oldpeak = c(0, 1, 0, 1.5, 0, 0, 0, 0, 1.5, 0, 0, 2, 0, 1,
0, 1.5, 0, 0, 1, 3, 0, 1, 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 2,
2, 0, 0, 1.5, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0), ST_Slope = structure(c(3L,
2L, 3L, 2L, 3L, 3L, 3L, 3L, 2L, 3L, 3L, 2L, 3L, 2L, 3L, 2L,
2L, 3L, 2L, 2L, 3L, 2L, 3L, 2L, 3L, 3L, 2L, 3L, 3L, 3L, 2L,
3L, 2L, 2L, 3L, 3L, 2L, 3L, 3L, 2L, 3L, 2L, 3L, 3L, 2L, 2L,
3L, 3L, 2L, 2L), .Label = c("Down", "Flat", "Up"), class = "factor"),
HeartDisease = structure(c(1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L,
2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L,
2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L,
1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L), .Label = c("0",
"1"), class = "factor")), row.names = c(NA, 50L), class = "data.frame")

Is there a way to provide n counts for a ggplot bar graph that uses a factor variable with the fill aesthetic?

I am working with a set of data that uses a factor variable that has "Yes" and "No" as levels of response. I've figured out how to create a bar graph based on this data, but I can't seem to get an n/count of each bar to work with the graph.
While the y-axis is "count", it's showing the proportion of yes and no as I intend it to. However, when I try to add a line to label the count, it goes far above the bars at the actual "count" on the y-axis.
The figure above is created with the code:
gun_oppo_plot <- ggplot(data = gun_survey_oppo, aes(x = condition, fill = gun_DV)) +
geom_bar(position = "fill", na.rm = TRUE) + theme_bw()
When I try to add a line such as geom_text(aes(label=..count..),stat="count"), I get the following figure:
Is there a way to get the same counts as in the lower figure, while maintaing the first one's focus on y from (0:1) and having the counts be on the bars themselves?
Thanks in advance for the help!
Data for replication:
structure(list(condition = structure(c(4L, 1L, 5L, 4L, 2L, 4L,
5L, 4L, 3L, 4L, 4L, 3L, 2L, 3L, 3L, 1L, 5L, 3L, 3L, 1L, 2L, 2L,
3L, 1L, 3L, 3L, 4L, 3L, 1L, 5L, 1L, 3L, 2L, 5L, 3L, 4L, 3L, 5L,
4L, 5L, 5L, 4L, 1L, 3L, 1L, 1L, 3L, 5L, 5L, 3L, 5L, 3L, 5L, 5L,
4L, 5L, 5L, 2L, 5L, 1L, 3L, 1L, 2L, 5L, 5L, 1L, 1L, 2L, 4L, 2L,
3L, 5L, 4L, 5L, 4L, 4L, 1L, 1L, 5L, 5L, 3L, 5L, 5L, 3L, 2L, 3L,
2L, 5L, 1L, 4L, 2L, 5L, 1L, 3L, 2L, 3L, 2L, 3L, 2L, 5L, 4L, 3L,
1L, 4L, 1L, 2L, 1L, 5L, 3L, 4L, 2L, 4L, 1L, 2L, 1L, 3L, 2L, 4L,
5L, 3L, 1L, 5L, 1L, 2L, 3L, 1L, 4L, 5L, 2L, 5L, 4L, 5L, 4L, 3L,
2L, 4L, 5L, 3L, 1L, 1L, 4L, 5L, 2L, 4L, 1L, 3L, 1L, 5L, 5L, 3L,
1L, 5L, 2L, 2L, 2L, 1L, 5L, 3L, 4L, 2L, 3L, 5L, 4L, 3L, 4L, 2L,
5L, 2L, 4L, 2L, 2L, 4L, 2L, 5L, 1L, 4L, 3L, 2L, 1L, 3L, 2L, 2L,
4L, 5L, 2L, 5L, 4L, 5L, 1L, 4L, 4L, 2L, 3L, 5L, 2L, 3L, 1L, 2L,
1L, 5L, 2L, 2L, 4L, 1L, 1L, 4L, 3L, 5L, 1L, 1L, 5L, 4L, 4L, 4L,
2L, 4L, 1L, 2L, 2L, 3L, 5L, 1L, 5L, 2L, 4L, 4L, 4L, 1L, 2L, 4L,
2L, 3L, 5L, 3L, 2L, 3L, 3L, 2L, 5L, 3L, 5L, 3L, 3L, 2L, 1L, 5L,
4L, 4L, 1L, 5L, 4L, 3L, 2L, 4L, 1L, 5L, 3L, 5L, 4L, 5L, 3L, 4L,
1L, 5L, 2L, 3L, 4L, 5L, 4L, 3L, 3L, 2L, 5L, 1L, 4L, 3L, 3L, 5L,
2L, 4L, 5L), .Label = c("0", "1", "2", "3", "4"), class = "factor"),
gun_DV = structure(c(2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L,
2L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L,
2L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L,
1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L,
1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 2L,
1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L,
1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L,
2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L,
1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L,
1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L,
1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L,
2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L,
2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L,
1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L,
1L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L,
1L, 1L), .Label = c("No", "Yes"), class = "factor")), class = "data.frame", row.names = c(2L,
4L, 8L, 9L, 12L, 13L, 17L, 21L, 25L, 26L, 28L, 31L, 35L, 37L,
44L, 46L, 47L, 49L, 52L, 53L, 56L, 59L, 66L, 71L, 74L, 76L, 79L,
81L, 83L, 85L, 94L, 97L, 98L, 104L, 109L, 110L, 114L, 116L, 117L,
120L, 122L, 124L, 129L, 130L, 133L, 136L, 138L, 144L, 147L, 152L,
157L, 158L, 162L, 167L, 169L, 171L, 178L, 188L, 195L, 198L, 203L,
206L, 209L, 211L, 213L, 217L, 219L, 222L, 225L, 228L, 230L, 231L,
235L, 237L, 240L, 256L, 257L, 259L, 260L, 262L, 267L, 269L, 271L,
272L, 278L, 279L, 285L, 289L, 294L, 295L, 297L, 299L, 300L, 302L,
304L, 310L, 311L, 314L, 318L, 319L, 321L, 323L, 326L, 328L, 333L,
341L, 342L, 343L, 348L, 357L, 359L, 360L, 363L, 364L, 372L, 375L,
377L, 379L, 387L, 391L, 392L, 394L, 397L, 399L, 401L, 404L, 405L,
411L, 416L, 418L, 421L, 423L, 427L, 428L, 430L, 434L, 438L, 446L,
454L, 456L, 458L, 460L, 463L, 465L, 477L, 479L, 482L, 485L, 490L,
493L, 497L, 500L, 501L, 503L, 507L, 512L, 514L, 516L, 519L, 522L,
525L, 531L, 533L, 539L, 541L, 543L, 552L, 555L, 556L, 559L, 563L,
566L, 569L, 570L, 572L, 574L, 576L, 579L, 581L, 584L, 589L, 590L,
596L, 598L, 599L, 603L, 607L, 609L, 611L, 613L, 618L, 620L, 621L,
624L, 625L, 628L, 629L, 638L, 641L, 644L, 645L, 647L, 651L, 653L,
658L, 663L, 665L, 666L, 675L, 677L, 678L, 680L, 686L, 693L, 697L,
699L, 700L, 704L, 705L, 708L, 709L, 713L, 715L, 717L, 718L, 721L,
724L, 726L, 728L, 735L, 739L, 741L, 748L, 750L, 753L, 756L, 758L,
759L, 762L, 769L, 772L, 780L, 782L, 786L, 788L, 790L, 793L, 796L,
799L, 801L, 804L, 806L, 808L, 809L, 818L, 820L, 823L, 825L, 832L,
835L, 836L, 842L, 844L, 846L, 847L, 855L, 856L, 858L, 860L, 861L,
865L, 867L, 872L, 875L, 876L, 878L, 884L, 887L, 891L, 893L, 896L
))
There might be some way to do this within ggplot itself but here is another way where we "prepare" the data first before plotting.
library(dplyr)
library(ggplot2)
gun_survey_oppo %>%
count(condition, gun_DV) %>%
group_by(condition) %>%
mutate(prop = prop.table(n)) %>%
ggplot(aes(condition, prop, fill = gun_DV, label = n)) +
geom_col(position = "fill", na.rm = TRUE) +
geom_text(position = position_stack(vjust = .5)) +
theme_bw()

Is it possible to table() two columns in a way that display the sum horizontally and vertically?

I have
> table(y$treatment,y$WHO)
1 2 3 4
SSTR 43 34 20 27
SSA 23 28 25 0
Control 0 0 0 0
I am looking for a way to display the sum of each row and column generated by table(). Thus, the expected output is:
1 2 3 4
SSTR 43 34 20 27 124
SSA 23 28 25 0 76
Control 0 0 0 0 0
66 62 45 27
I am particularly interested in dplyr-solutions.
My data
y <- structure(list(treatment = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L), .Label = c("SSTR", "SSA", "Control"), class = "factor"),
WHO = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L,
2L, 3L, 3L, 3L, 2L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 4L,
4L, 1L, 4L, 1L, 2L, 1L, 4L, 1L, 1L, 1L, 1L, 2L, 4L, 1L, 2L,
1L, 4L, 1L, 4L, 4L, 4L, 4L, 3L, 3L, 4L, 4L, 4L, 4L, 1L, 4L,
4L, 2L, 1L, 2L, 2L, 4L, 4L, 4L, 2L, 4L, 1L, 4L, 4L, 2L, 4L,
4L, 3L, 4L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 3L, 2L, 2L,
2L, 3L, 2L, 3L, 1L, 2L, 3L, 3L, 3L, 1L, 2L, 1L, 2L, 3L, 3L,
1L, 3L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L,
2L, 2L, 3L, 3L, 1L, 3L, 1L, 3L, 3L, 2L, 3L, 1L, 1L, 2L, 1L,
1L, 3L, 2L, 1L, 1L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 1L, 2L, 3L, 2L, 2L, 2L, 1L,
3L, 3L, 3L, 2L, 3L, 2L, 3L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L,
2L, 1L, 1L, 3L, 2L, 3L, 1L, 1L, 1L, 1L), .Label = c("1",
"2", "3", "4"), class = "factor")), na.action = structure(c(`152` = 152L,
`193` = 193L), class = "omit"), row.names = c(1L, 2L, 3L, 4L,
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L,
19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L,
32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L,
45L, 46L, 47L, 48L, 49L, 50L, 51L, 52L, 53L, 54L, 55L, 56L, 57L,
58L, 59L, 60L, 61L, 62L, 63L, 64L, 65L, 66L, 67L, 68L, 69L, 70L,
71L, 72L, 73L, 74L, 75L, 76L, 77L, 78L, 79L, 80L, 81L, 82L, 83L,
84L, 85L, 86L, 87L, 88L, 89L, 90L, 91L, 92L, 93L, 94L, 95L, 96L,
97L, 98L, 99L, 100L, 101L, 102L, 103L, 104L, 105L, 106L, 107L,
108L, 109L, 110L, 111L, 112L, 113L, 114L, 115L, 116L, 117L, 118L,
119L, 120L, 121L, 122L, 123L, 124L, 125L, 126L, 127L, 128L, 129L,
130L, 131L, 132L, 133L, 134L, 135L, 136L, 137L, 138L, 139L, 140L,
141L, 142L, 143L, 144L, 145L, 146L, 147L, 148L, 149L, 150L, 151L,
153L, 154L, 155L, 156L, 157L, 158L, 159L, 160L, 161L, 162L, 163L,
164L, 165L, 166L, 167L, 168L, 169L, 170L, 171L, 172L, 173L, 174L,
175L, 176L, 177L, 178L, 179L, 180L, 181L, 182L, 183L, 184L, 185L,
186L, 187L, 188L, 189L, 190L, 191L, 192L, 194L, 195L, 196L, 197L,
198L, 199L, 200L, 201L, 202L), class = "data.frame")
A possible solution to consider:
x<-table(y$treatment,y$WHO)
rowcoltotals <- addmargins(x, FUN = list(Total = sum), quiet = TRUE)
output:
1 2 3 4 Total
SSTR 43 34 20 27 124
SSA 23 28 25 0 76
Control 0 0 0 0 0
Total 66 62 45 27 200

Factors being converted / displayed as integers in R after dcast

In the question presented here, sample data was converted from wide to long format using dcast. However, when attempting to apply the same approach to the actual data set (or an abbreviated form thereof):
dcast(melt(smallz, 1:2), behavior_num + variable ~ rater)
The factors for the variable (i.e., the original column 3), are displayed as integers.
(Why) are the factors being displayed as integers?
How might they still be displayed as characters?
The smaller data subset is here:
structure(list(rater = structure(c(2L, 1L, 6L, 7L, 3L, 5L, 4L,
2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L,
6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L,
3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L,
4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L,
1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L,
7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L,
5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L,
2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L,
6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L,
3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L,
4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L,
1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L,
7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L,
5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L,
2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L,
6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L,
3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L,
4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L, 2L, 1L, 6L, 7L, 3L, 5L, 4L), .Label = c("Al",
"Dan", "Gabi", "john", "bill", "rebecca",
"ted"), class = "factor"), behavior_num = c(6L,
6L, 6L, 6L, 6L, 6L, 6L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 20L,
20L, 20L, 20L, 20L, 20L, 20L, 22L, 22L, 22L, 22L, 22L, 22L, 22L,
23L, 23L, 23L, 23L, 23L, 23L, 23L, 41L, 41L, 41L, 41L, 41L, 41L,
41L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 49L, 49L, 49L, 49L, 49L,
49L, 49L, 54L, 54L, 54L, 54L, 54L, 54L, 54L, 58L, 58L, 58L, 58L,
58L, 58L, 58L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 66L, 66L, 66L,
66L, 66L, 66L, 66L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 73L, 73L,
73L, 73L, 73L, 73L, 73L, 82L, 82L, 82L, 82L, 82L, 82L, 82L, 84L,
84L, 84L, 84L, 84L, 84L, 84L, 112L, 112L, 112L, 112L, 112L, 112L,
112L, 116L, 116L, 116L, 116L, 116L, 116L, 116L, 121L, 121L, 121L,
121L, 121L, 121L, 121L, 122L, 122L, 122L, 122L, 122L, 122L, 122L,
127L, 127L, 127L, 127L, 127L, 127L, 127L, 132L, 132L, 132L, 132L,
132L, 132L, 132L, 133L, 133L, 133L, 133L, 133L, 133L, 133L, 135L,
135L, 135L, 135L, 135L, 135L, 135L, 142L, 142L, 142L, 142L, 142L,
142L, 142L, 145L, 145L, 145L, 145L, 145L, 145L, 145L, 147L, 147L,
147L, 147L, 147L, 147L, 147L, 155L, 155L, 155L, 155L, 155L, 155L,
155L, 162L, 162L, 162L, 162L, 162L, 162L, 162L, 173L, 173L, 173L,
173L, 173L, 173L, 173L, 178L, 178L, 178L, 178L, 178L, 178L, 178L,
179L, 179L, 179L, 179L, 179L, 179L, 179L, 182L, 182L, 182L, 182L,
182L, 182L, 182L, 183L, 183L, 183L, 183L, 183L, 183L, 183L, 186L,
186L, 186L, 186L, 186L, 186L, 186L, 193L, 193L, 193L, 193L, 193L,
193L, 193L, 196L, 196L, 196L, 196L, 196L, 196L, 196L, 204L, 204L,
204L, 204L, 204L, 204L, 204L, 206L, 206L, 206L, 206L, 206L, 206L,
206L, 207L, 207L, 207L, 207L, 207L, 207L, 207L, 211L, 211L, 211L,
211L, 211L, 211L, 211L, 211L, 231L, 231L, 231L, 231L, 231L, 231L
), self.and.tech = structure(c(2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 3L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L,
2L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L,
2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 1L, 3L, 3L, 2L, 3L, 2L,
3L, 1L, 1L, 3L, 1L, 3L, 1L, 3L, 1L, 2L, 3L, 3L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 1L, 1L, 1L, 3L, 1L, 1L, 3L, 2L, 1L, 1L, 1L, 1L, 3L,
3L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 1L, 1L, 1L, 2L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 3L, 2L, 1L, 1L,
1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 2L, 1L, 2L, 2L, 1L,
3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 2L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("more commonly reinforced",
"neither a history of reinforcement or punishment are discernible from the behaviors evidenced",
"more commonly punished"), class = "factor")), .Names = c("rater",
"behavior_num", "self.and.tech"), row.names = c(NA, -294L), class = "data.frame"

R - ggplot2 extrapolated regression lines in linear region

I have the following data frame (attached). I have plotted CR vs A for various Collimator / Head combinations.
(p <- ggplot(df,aes(x=A,y=CR,col=Head))+geom_point()+geom_line() +facet_grid(Collimator~Head, scales="fixed")+scale_x_continuous("Activity [MBq]", expand = c(0,0))+ylim(0,80000)+ ylab("Count Rate [cps]") + theme_bw()+theme(legend.position = "none"))
In an ideal world the above plot would be linear. In reality CR will begin to fall off with A due to increased system deadtime. What I would like to add to each facet is a straight line fit which passes through the first 2 data points only - this is before dead time kicks in.
Is there a simple way to do this in ggplot2. Can I use geom_smooth(method = "lm") with some additional options?
structure(list(A0 = c(76L, 274L, 786L, 1060L, 1294L, 2092L, 2639L,
3437L, 4223L, 76L, 274L, 786L, 1060L, 1294L, 2092L, 2639L, 3437L,
4223L, 76L, 274L, 786L, 1060L, 1294L, 2092L, 2639L, 3437L, 4223L,
76L, 274L, 786L, 1060L, 1294L, 2092L, 2639L, 3437L, 4223L, 76L,
274L, 786L, 1060L, 1294L, 2092L, 2639L, 3437L, 4223L, 76L, 274L,
786L, 1060L, 1294L, 2092L, 2639L, 3437L, 4223L), T = c(85L, 87L,
88L, 89L, 89L, 90L, 91L, 92L, 93L, 97L, 98L, 99L, 100L, 101L,
102L, 103L, 103L, 104L, 306L, 308L, 310L, 311L, 313L, 315L, 316L,
317L, 321L, 328L, 330L, 331L, 332L, 336L, 338L, 340L, 341L, 342L,
352L, 354L, 357L, 358L, 361L, 363L, 364L, 366L, 368L, 376L, 378L,
379L, 380L, 385L, 386L, 388L, 389L, 390L), A = c(64.8860944957,
233.0628375794, 667.3247389509, 898.2821229937, 1096.5821388243,
1769.5416286837, 2228.0796200189, 2896.4301555482, 3552.1951906822,
63.4538798403, 228.3428223318, 653.8100019998, 880.0900106808,
1072.3775535078, 1730.4829756141, 2178.8997717016, 2837.7713207042,
3480.2557273313, 43.0160516527, 154.5083447781, 441.5789350636,
594.4069507774, 722.9307781622, 1164.4170158664, 1466.1502053416,
1905.9469999005, 2324.4554021136, 41.2913626085, 148.3134747414,
424.6633733747, 571.6370071823, 692.6559941892, 1115.653739112,
1402.1405840581, 1822.7365994889, 2235.4125025879, 39.4886520314,
141.8383609947, 404.6153215597, 544.6504360348, 661.1848647194,
1064.9635212237, 1340.925513839, 1739.9197611259, 2129.880289335,
37.7646447282, 135.6459396877, 388.3926422248, 522.8131775262,
632.318659446, 1020.3651426265, 1282.3829893435, 1667.0556688926,
2044.484697239), Counts = c(102830L, 328231L, 784020L, 1010212L,
1160531L, 1582051L, 1760850L, 1888034L, 1897347L, 99780L, 317952L,
749548L, 965314L, 1106831L, 1488386L, 1672990L, 1793667L, 1789803L,
129507L, 453800L, 1053106L, 1327867L, 1473197L, 1900706L, 2075742L,
1991265L, 1756820L, 121230L, 424329L, 994864L, 1237568L, 1374478L,
1734922L, 1921046L, 1878514L, 1664225L, 213389L, 712467L, 1498082L,
1777791L, 1882367L, 1824631L, 1525162L, 1250229L, 1072038L, 193591L,
651249L, 1354850L, 1594421L, 1653835L, 1669993L, 1436444L, 1144518L,
1015859L), CR = c(3428L, 10941L, 26134L, 33674L, 38684L, 52735L,
58695L, 62934L, 63245L, 3326L, 10598L, 24985L, 32177L, 36894L,
49613L, 55766L, 59789L, 59660L, 4317L, 15127L, 35104L, 44262L,
49107L, 63357L, 69191L, 66376L, 58561L, 4041L, 14144L, 33162L,
41252L, 45816L, 57831L, 64035L, 62617L, 55474L, 7113L, 23749L,
49936L, 59260L, 62746L, 60821L, 50839L, 41674L, 35735L, 6453L,
21708L, 45162L, 53147L, 55128L, 55666L, 47881L, 38151L, 33862L
), Head = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("H1",
"H2"), class = "factor"), Collimator = structure(c(1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L), .Label = c("HRGP", "LEGP", "LEHS"), class = "factor")), .Names = c("A0",
"T", "A", "Counts", "CR", "Head", "Collimator"), row.names = c(NA,
-54L), class = "data.frame")
This should do it:
library(ggplot2)
(p <- ggplot(df,aes(x=A,y=CR,col=Head))+
geom_point()+geom_line() +
facet_grid(Collimator~Head, scales="fixed")+
scale_x_continuous("Activity [MBq]",
expand = c(0,0))+ylim(0,80000)+
ylab("Count Rate [cps]") + theme_bw()+theme(legend.position = "none"))
library(plyr)
subdf <- ddply(df,c("Collimator","Head"),
function(x) x[1:2,])
p + geom_smooth(method="lm",data=subdf,colour="gray",se=FALSE,
fullrange=TRUE)
One approach would be to make new data frame that contains pnly first two values for each combination of Collimator and Head. Then calulate slope and intercept values for those two values and use them in geom_abline() to draw straight lines.
library(plyr)
#subset only firt two values
df2<-ddply(df,.(Collimator,Head),function(x) head(x,2))
head(df2)
A0 T A Counts CR Head Collimator
1 76 97 63.45388 99780 3326 H1 HRGP
2 274 98 228.34282 317952 10598 H1 HRGP
3 76 85 64.88609 102830 3428 H2 HRGP
4 274 87 233.06284 328231 10941 H2 HRGP
5 76 328 41.29136 121230 4041 H1 LEGP
6 274 330 148.31347 424329 14144 H1 LEGP
#caclulate slope and intercept
df3<-ddply(df2,.(Collimator,Head),summarise, int=coefficients(lm(CR~A))[1],
slop=coefficients(lm(CR~A))[2])
df3
Collimator Head int slop
1 HRGP H1 527.5309 44.10241
2 HRGP H2 529.3279 44.67324
3 LEGP H1 143.0519 94.40105
4 LEGP H2 146.2766 96.95737
5 LEHS H1 567.3029 155.85205
6 LEHS H2 694.4843 162.54077
ggplot(df,aes(x=A,y=CR,col=Head))+geom_point()+geom_line() +
facet_grid(Collimator~Head, scales="fixed") +
scale_x_continuous("Activity [MBq]", expand = c(0,0))+ ylim(0,80000) +
ylab("Count Rate [cps]") +
theme_bw()+theme(legend.position = "none")+
geom_abline(data=df3,aes(intercept=int,slope=slop,color=Head))

Resources