Author

Diego Garrido

Published

June 9, 2025

Data

Original dataset

From RiskHEV.xlsx$3-Dades_gomets.

Q1. Confirm that “cinta contenedor” and “ext-contenidor interior” are actually “contenidor manec ferro”; and that “int” is “contenidor interior”

Code
tb = data.frame(
  spot = c(
    rep(c("llum", "porta", "bossa identificativa (pinça)", "contenidor manec ferro", "contenidor interior"), 4),
    "llum", "porta", "contenidor manec ferro","contenidor interior", "contenidor manec ferro"),
  date = as.Date(c(
    rep("04/24/2024", 5), 
    rep("05/08/2024", 5), 
    rep("05/23/2024", 5), 
    rep("06/05/2024", 5), 
    rep("06/24/2024", 3), 
    rep("07/15/2024", 2)
  ), format = "%m/%d/%Y"),
  hev = c(
    4.77E+02, 3.14E+02, NA, 2.00E+03, 3.51E+04,
    NA, 4.90E-02, NA, 1.70E+00, NA,
    2.97E-01, NA, NA, 1.74E+02, 2.31E+02,
    1.29E+01, 4.17E-01, 1.20E-01, 1.34E+00, 6.40E-01,
    NA, 3.51E-01, 4.30E+02,
    NA, NA
  ))
spot date hev
llum 2024-04-24 477.000
porta 2024-04-24 314.000
bossa identificativa (pinça) 2024-04-24 NA
contenidor manec ferro 2024-04-24 2000.000
contenidor interior 2024-04-24 35100.000
llum 2024-05-08 NA
porta 2024-05-08 0.049
bossa identificativa (pinça) 2024-05-08 NA
contenidor manec ferro 2024-05-08 1.700
contenidor interior 2024-05-08 NA
llum 2024-05-23 0.297
porta 2024-05-23 NA
bossa identificativa (pinça) 2024-05-23 NA
contenidor manec ferro 2024-05-23 174.000
contenidor interior 2024-05-23 231.000
llum 2024-06-05 12.900
porta 2024-06-05 0.417
bossa identificativa (pinça) 2024-06-05 0.120
contenidor manec ferro 2024-06-05 1.340
contenidor interior 2024-06-05 0.640
llum 2024-06-24 NA
porta 2024-06-24 0.351
contenidor manec ferro 2024-06-24 430.000
contenidor interior 2024-07-15 NA
contenidor manec ferro 2024-07-15 NA

Data preprocessing

  • Make groups: S1: “porta” + “llum”; S2: “contenidor[…]”
  • Remove spot: “bossa identificativa (pinça)”
  • Add helper columns: group, datenum (days from 2024-04-01), dategroup
Code
tb %<>% 
  filter(spot != "bossa identificativa (pinça)") %>%
  mutate(
    group= case_when(
      spot %in% c("porta", "llum") ~ "S1",
      grepl("contenidor", spot) ~ "S2"
    ),
    datenum = as.numeric(date - as.Date("2024-04-24")),
    dategroup = ifelse(datenum <= 29, "april-may", "june-july")
  )
spot date hev group datenum dategroup
llum 2024-04-24 477.000 S1 0 april-may
porta 2024-04-24 314.000 S1 0 april-may
contenidor manec ferro 2024-04-24 2000.000 S2 0 april-may
contenidor interior 2024-04-24 35100.000 S2 0 april-may
llum 2024-05-08 NA S1 14 april-may
porta 2024-05-08 0.049 S1 14 april-may
contenidor manec ferro 2024-05-08 1.700 S2 14 april-may
contenidor interior 2024-05-08 NA S2 14 april-may
llum 2024-05-23 0.297 S1 29 april-may
porta 2024-05-23 NA S1 29 april-may
contenidor manec ferro 2024-05-23 174.000 S2 29 april-may
contenidor interior 2024-05-23 231.000 S2 29 april-may
llum 2024-06-05 12.900 S1 42 june-july
porta 2024-06-05 0.417 S1 42 june-july
contenidor manec ferro 2024-06-05 1.340 S2 42 june-july
contenidor interior 2024-06-05 0.640 S2 42 june-july
llum 2024-06-24 NA S1 61 june-july
porta 2024-06-24 0.351 S1 61 june-july
contenidor manec ferro 2024-06-24 430.000 S2 61 june-july
contenidor interior 2024-07-15 NA S2 82 june-july
contenidor manec ferro 2024-07-15 NA S2 82 june-july

Descriptive stats

Code
set.seed(123)
# ggplot(tb, aes(y = log10(hev), x = spot)) +
#   geom_boxplot(col = "gray", outlier.size = 0) +
#   geom_jitter(width = 0.2) +
#   theme_classic(base_size = 18) +
#   theme(axis.text = element_text(angle = 45, hjust = 1))
ggplot(tb, aes(x = spot, y = log10(hev))) +
  stat_summary(fun = mean, geom = "point", size = 3) +
  stat_summary(
    fun.data = mean_cl_normal, 
    geom = "errorbar", 
    width = 0.2
  ) +
  geom_jitter(width = 0.2, alpha = 0.6) +
  theme_classic(base_size = 18) +
  theme(axis.text = element_text(angle = 45, hjust = 1))

Code
ggplot(tb, aes(y = log10(hev), x = group)) +
  geom_boxplot(col = "gray", outlier.size = 0) +
  geom_jitter(width = 0.2) +
  theme_classic(base_size = 18) +
  theme(axis.text = element_text(angle = 45, hjust = 1))

Code
ggplot(tb, aes(y = log10(hev), x = dategroup)) +
  geom_boxplot(col = "gray", outlier.size = 0) +
  geom_jitter(width = 0.2) +
  theme_classic(base_size = 18) +
  theme(axis.text = element_text(angle = 45, hjust = 1))

Code
# fisher.test(with(tb, table(dategroup, is.na(hev))))

ggplot(tb[!is.na(tb$hev), ], aes(x = datenum, y = log10(hev))) +
  geom_point(alpha = 0.6) +                         
  geom_smooth(method = "lm", se = TRUE,             
              linewidth = 1, colour = "steelblue",
              fill = "lightblue") +
  theme_classic(base_size = 18) 

Code
lm.fit <- lm(log10(hev)~datenum, data = tb)
# plot(lm.fit)
summary(lm.fit)

Call:
lm(formula = log10(hev) ~ datenum, data = tb)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0597 -0.9762  0.2168  1.0399  2.6638 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  2.28014    0.67630   3.371  0.00501 **
datenum     -0.03788    0.01985  -1.908  0.07870 . 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.598 on 13 degrees of freedom
  (6 observations deleted due to missingness)
Multiple R-squared:  0.2188,    Adjusted R-squared:  0.1587 
F-statistic: 3.641 on 1 and 13 DF,  p-value: 0.0787
  • NAs to min detection:
Code
tb2 = tb
tb2$hev[is.na(tb2$hev)] = min(tb2$hev, na.rm = T)

ggplot(tb2, aes(x = datenum, y = log10(hev))) +
  geom_point(alpha = 0.6) +                         
  geom_smooth(method = "lm", se = TRUE,
              linewidth = 1, colour = "steelblue",
              fill = "lightblue") +
  theme_classic(base_size = 18)

Code
lm.fit2 <- lm(log10(hev)~datenum, data = tb2)
# plot(lm.fit)
summary(lm.fit2)

Call:
lm(formula = log10(hev) ~ datenum, data = tb2)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.4867 -0.9464 -0.1143  1.0132  3.0963 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  1.66531    0.60547    2.75   0.0127 *
datenum     -0.03489    0.01466   -2.38   0.0280 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.693 on 19 degrees of freedom
Multiple R-squared:  0.2296,    Adjusted R-squared:  0.1891 
F-statistic: 5.663 on 1 and 19 DF,  p-value: 0.02796

Q2. It would be interesting to add temperature data to this descriptive analysis.

Exposure assesment

Surface model

\[d = C_{HEV} \times \frac{f_{conv}}{r_{eff}} \times f_{conv|surf} \times TE_{surf|hand} \times TE_{hand|mouth} \times f_{cont|mouth}\]

We do not include \(n_{hours}\) as we consider daily doses.

  • Concentration of HEV (surface, CG/cm\(^2\)), \(C_{HEV} \sim\) Lognormal\((\mu, \sigma)\). We consider left-censored data.

-Group S1:

Code
tbs1 = subset(tb, group == "S1")
tbs1cens = data.frame(left = tbs1$hev, right = tbs1$hev)
tbs1cens$right[is.na(tbs1cens$right)] = min(tbs1cens$right, na.rm = T)
fit1 = fitdistcens(tbs1cens, distr = "lnorm")
fit1
Fitting of the distribution ' lnorm ' on censored data by maximum likelihood 
Parameters:
          estimate
meanlog -0.9618246
sdlog    4.5238145

Q3. Detection limit (common or specific to door and light?)

-Group S2:

Code
tbs2 = subset(tb, group == "S2")
tbs2cens = data.frame(left = tbs2$hev, right = tbs2$hev)
tbs2cens$right[is.na(tbs2cens$right)] = min(tbs2cens$right, na.rm = T)
fit2 = fitdistcens(tbs2cens, distr = "lnorm")
fit2
Fitting of the distribution ' lnorm ' on censored data by maximum likelihood 
Parameters:
        estimate
meanlog 2.233536
sdlog   4.874869
  • Conversion factor (TCID50/GC), \(f_{conv} = \frac{1}{700}\) (McBride et al. 2013).
  • Recovert efficiency (%), \(r_{eff} = 7.3\) (Itarte et al. 2024).
  • Frequency of hand-to-surface contacts per work day (“jornada laboral”) (events/day), \(f_{conv|surf} \sim\) Uniform \((a, b)\) (from RiskHEV.xlsx$3-Dades_gomets):
spot a b
llum 6 8
porta 2 20
contenidor manec ferro 0 4
contenidor interior 0 4

Q4. How to integrate different spots within S1?

  • Viral transfer efficiency from surface to bare hands (%), \(TE_{surf|hand} \sim\) Normal \((\mu = 37, \sigma = 16)\) (Lopez et al. 2013). Q5. Make sure we can use this distribution/parameters here too.

  • Viral transfer efficiency from hands to mouth (%), \(TE_{hand|mouth} = 34\) (Rusin et al. 2002).

  • Frequency of hand-to-mouth contacts (events/hour), \(f_{cont|mouth}\) (Wilson et al. 2021). Here we have parameters \(\mu \simeq 2.8, \sigma \simeq 2.7\). Q6. But which distribution? Normal or Lognormal? in addition, this is events/hour. Shouldn’t we consider events/day?

Splashing model

Q7. I assume this model is only for S2. Not sure about which equation should I employ here. In Itarte et al. (2024) (see section 2.4.2.1, eq. 1) and in RiskHEV.xlsx$2-Model_splashing there are different models. Not sure either about \(V_{leachate}\) (units do not match with \(C_{HEV}\): ml \(vs\) GC/cm\(^2\)..

Dose-response model (Beta-Poisson)

Exact model

\[ P_{inf}(d|\alpha,\beta) = 1 - {}_1F_1\left( \alpha, \alpha + \beta, -d \right) \]

Approximation

\[ P_{inf}(d|\alpha,\beta) = 1 - \left(1 + \frac{d}{\beta} \right)^{-\alpha} \] This approximation is valid when \(\alpha << \beta\) and \(\beta >> 1\) (Haas et al. 2014).

Reparametrization based on \(N_{50}\)

\[ P_{inf}(d |\alpha, N_{50}) = 1 - \left ( 1 + (2^{1/\alpha}-1)\cdot \frac{d}{N_{50}}\right ) ^{-\alpha}\] where \(\beta = \frac{N_{50}}{2^{1/\alpha}-1}\). A good description of the Beta-Poisson model is provided in Teunis et al. (2000).

Parameter estimation

Parameters derived for HEV from chimpanzee data via MLE in Ruchusatsawat et al. (2022):

  • \(\alpha = 216.89\)
  • \(N_{50} = 3.03 \cdot 10^7\) (intravenous inoculation)

95% CI for both parameters are shown in Figs. 2-3, but data (to the best of my knowledge) is not provided.

Wilkins et al. (2025) refers to Müller et al. (2017) and AFSSA (2009) and suggests to use \(N_{50} = 10^{5.5}\) instead (based on consumption of pork-derived products).

Q8. Discuss which value of \(N_{50}\) should we use.

Q9. In Itarte et al. (2024) we have an equation (eq. 4) to compute \(P_{ill}\) (probability of illness) from \(P_{inf}\) (probability of infection), but for HEV we do not have such equation (we lack the parameter estimates). In Ruchusatsawat et al. (2022), they use a similar strategy (eqs. 6 and 11). We may be able to use this, but I am not sure whether it would be equivalent. We should discuss it.

References

AFSSA. 2009. “Opinion of the French Food Safety Agency regarding hepatitis E virus: Methods for detection, risks to the consumer and risks to the environment.” https://www.anses.fr/en/system/files/MIC2009sa0146EN.pdf.
Haas, C. et al. 2014. Quantitative Microbial Risk Assessment: Second Edition. Quantitative Microbial Risk Assessment: Second Edition. Vol. 9781118145296. Wiley Blackwell. https://doi.org/10.1002/9781118910030.
Itarte, M. et al. 2024. “Assessing environmental exposure to viruses in wastewater treatment plant and swine farm scenarios with next-generation sequencing and occupational risk approaches.” International Journal of Hygiene and Environmental Health 259 (June): 114360. https://doi.org/10.1016/J.IJHEH.2024.114360.
Lopez, G. U. et al. 2013. “Transfer Efficiency of Bacteria and Viruses from Porous and Nonporous Fomites to Fingers under Different Relative Humidity Conditions.” Applied and Environmental Microbiology 79 (18): 5728–34. https://doi.org/10.1128/AEM.01030-13.
McBride, G. B. et al. 2013. “Discharge-based QMRA for estimation of public health risks from exposure to stormwater-borne pathogens in recreational waters in the United States.” Water Research 47 (14): 5282–97. https://doi.org/10.1016/J.WATRES.2013.06.001.
Müller, A. et al. 2017. “Assessment of the risk of foodborne transmission and burden of hepatitis E in Switzerland.” International Journal of Food Microbiology 242 (February): 107–15. https://doi.org/10.1016/J.IJFOODMICRO.2016.11.018.
Ruchusatsawat, K. et al. 2022. “Quantitative Risk Assessments of Hepatitis A Virus and Hepatitis E Virus from Raw Oyster Consumption.” Risk Analysis 42 (5): 953–65. https://doi.org/10.1111/RISA.13832.
Rusin, P. et al. 2002. “Comparative surface‐to‐hand and fingertip‐to‐mouth transfer efficiency of gram‐positive bacteria, gram‐negative bacteria, and phage.” Journal of Applied Microbiology 93 (4): 585–92. https://doi.org/10.1046/J.1365-2672.2002.01734.X.
Teunis, P. et al. 2000. “The Beta Poisson Dose-Response Model Is Not a Single-Hit Model.” Risk Analysis 20 (4): 513–20. https://doi.org/10.1111/0272-4332.204048.
Wilkins, N. et al. 2025. “A farm-to-consumption quantitative microbiological risk assessment for hepatitis E in pigs.” Risk Analysis, 1–16. https://doi.org/10.1111/RISA.70035.
Wilson, A. M. et al. 2021. “Frequency of hand-to-head, -mouth, -eyes, and -nose contacts for adults and children during eating and non-eating macro-activities.” Journal of Exposure Science & Environmental Epidemiology 2020 31:1 31 (1): 34–44. https://doi.org/10.1038/s41370-020-0249-8.