How do epiR's epi.2by2 functions calculate odds ratios (ORs) and CIs, and why don't they match by hand calculations? I've seen a number of related questions using by-hand calcuations for the OR, but I'm interested in using the epi.2by2 functions in epiR.  Given a 2 by 2 cross-sectional table as below (q2.m), a single call to epi should do it:
q2.m = matrix(c(45,14,22,33), nrow=2, byrow=T, 
              dimnames = list(c("High dose", "Low dose"),c("fav", "unfav")))
epi.2by2(q2.m)

...yields...
         Outcome +    Outcome -      Total        Prevalence *        Odds
Exposed +           45           14         59                76.3       3.214
Exposed -           22           33         55                40.0       0.667
Total               67           47        114                58.8       1.426

Point estimates and 95 % CIs:
---------------------------------------------------------
Prevalence ratio                             1.91 (1.34, 2.72)
Odds ratio                                   4.75 (2.01, 11.75)
Attrib prevalence *                          36.27 (19.38, 53.17)
Attrib prevalence in population *            18.77 (2.98, 34.56)
Attrib fraction in exposed (%)               47.56 (25.31, 63.18)
Attrib fraction in population (%)            31.94 (13.12, 46.68)
---------------------------------------------------------
 * Cases per 100 population units 

But that OR looks a bit odd.  The cross product OR (45x33)/(14x22) = 4.82.  Or seen another way, the ratio of the reported odds (3.214 / 0.667) = 4.82.  
So what's that OR=4.75 referring to?!  I'm confused.  Help?
 A: The number 4.75 is a (bona fide) estimate of the population odds ratio. The help page for epi.2by2() tells you:

Point estimates and confidence intervals the odds ratio are calculated using the exact method (using function fisher.test).

And the help page for fisher.test() tells you:

Note that the conditional Maximum Likelihood Estimate (MLE) rather than the unconditional MLE (the sample odds ratio) is used.

The ‘conditional’ part is because you’re conditioning on both marginals being fixed by design (which, BTW, gives you a conservative test and confidence interval when they’re not).
The conditional ML estimate and the sample odds are usually very close, unless you have very few events/non-events (and then the confidence interval will be very wide anyway).
A: Maybe the parameters to your function call are not the same. 
I get Odds Ratio of 4.82 just like the cross product you have shown. 
epi.2by2(tab2, method="cohort.count", conf.level=.95)
         Outcome +    Outcome -      Total        Inc risk *        Odds

Exposed +           45           22         67              67.2       2.045
Exposed -           14           33         47              29.8       0.424
Total               59           55        114              51.8       1.073
Point estimates and 95 % CIs:
Inc risk ratio                               2.25 (1.41, 3.61)
Odds ratio                                   4.82 (2.15, 10.80)
Attrib risk *                                37.38 (20.13, 54.62)
Attrib risk in population *                  21.97 (6.00, 37.94)
Attrib fraction in exposed (%)               55.65 (29.06, 72.27)
Attrib fraction in population (%)            42.45 (17.16, 60.01)
X2 test statistic: 15.455 p-value: < 0.001
 Wald confidence limits
 * Outcomes per 100 population units
