Fichier BDD :

data <- read.csv2(
  "coprogroupe(2).csv",
  header = TRUE,
  stringsAsFactors = FALSE,
  na.strings = c("", "NA"))

dim(data)
## [1] 168 185
names(data)
##   [1] "Mois"       "SGIMultiSP" "SGIPrimiSP" "SGILOTSP"   "SGINulliSP"
##   [6] "SGLMultiSP" "SGLPrimiSP" "SGLLOTSP"   "SGLNulliSP" "TRIMultiSP"
##  [11] "TRIPrimiSP" "TRILOTSP"   "TRINulliSP" "SKJMultiSP" "SKJPrimiSP"
##  [16] "SKJLOTSP"   "SKJNulliSP" "MONMultiSP" "MONPrimiSP" "MONLOTSP"  
##  [21] "MONNulliSP" "COCMultiSP" "COCPrimiSP" "COCLOTSP"   "COCNulliSP"
##  [26] "GDDMultiSP" "GDDPrimiSP" "GDDLOTSP"   "GDDNulliSP" "PTDMultiSP"
##  [31] "PTDPrimiSP" "PTDLOTSP"   "PTDNulliSP" "PARMultiSP" "PARPrimiSP"
##  [36] "PARLOTSP"   "PARNulliSP" "MUEMultiSP" "MUEPrimiSP" "MUELOTSP"  
##  [41] "MUENulliSP" "EFFMultiSP" "EFFPrimiSP" "EFFTotSP"   "CharSAUSP" 
##  [46] "CharSFPSP"  "SGIMultiDP" "SGIPrimiDP" "SGILOTDP"   "SGINulliDP"
##  [51] "SGLMultiDP" "SGLPrimiDP" "SGLLOTDP"   "SGLNulliDP" "TRIMultiDP"
##  [56] "TRIPrimiDP" "TRILOTDP"   "TRINulliDP" "SKJMultiDP" "SKJPrimiDP"
##  [61] "SKJLOTDP"   "SKJNulliDP" "MONMultiDP" "MONPrimiDP" "MONLOTDP"  
##  [66] "MONNulliDP" "COCMultiDP" "COCPrimiDP" "COCLOTDP"   "COCNulliDP"
##  [71] "GDDMultiDP" "GDDPrimiDP" "GDDLOTDP"   "GDDNulliDP" "PTDMultiDP"
##  [76] "PTDPrimiDP" "PTDLOTDP"   "PTDNulliDP" "PARMultiDP" "PARPrimiDP"
##  [81] "PARLOTDP"   "PARNulliDP" "MUEMultiDP" "MUEPrimiDP" "MUELOTDP"  
##  [86] "MUENulliDP" "EFFMultiDP" "EFFPrimiDP" "EFFTotDP"   "CharSAUDP" 
##  [91] "CharSFPDP"  "SGITOTDB"   "SGIMultiDB" "SGIPrimiDB" "SGILOTDB"  
##  [96] "SGINulliDB" "SGLTOTDB"   "SGLMultiDB" "SGLPrimiDB" "SGLLOTDB"  
## [101] "SGLNulliDB" "TRITOTDB"   "TRIMultiDB" "TRIPrimiDB" "TRILOTDB"  
## [106] "TRINulliDB" "SKJTOTDB"   "SKJMultiDB" "SKJPrimiDB" "SKJLOTDB"  
## [111] "SKJNulliDB" "MONTOTDB"   "MONMultiDB" "MONPrimiDB" "MONLOTDB"  
## [116] "MONNulliDB" "COCTOTDB"   "COCMultiDB" "COCPrimiDB" "COCLOTDB"  
## [121] "COCNulliDB" "GDDTOTDB"   "GDDMultiDB" "GDDPrimiDB" "GDDLOTDB"  
## [126] "GDDNulliDB" "PTDTOTDB"   "PTDMultiDB" "PTDPrimiDB" "PTDLOTDB"  
## [131] "PTDNulliDB" "PARTOTDB"   "PARMultiDB" "PARPrimiDB" "PARLOTDB"  
## [136] "PARNulliDB" "MUETOTDB"   "MUEMultiDB" "MUEPrimiDB" "MUELOTDB"  
## [141] "MUENulliDB" "EFFMultiDB" "EFFPrimiDB" "EFFTOTDB"   "CharSAUDB" 
## [146] "CharSFPDB"  "OesoT"      "TeladoT"    "HaemoT"     "OesoDP"    
## [151] "TeladoDP"   "HaemoDP"    "OesoSP"     "TeladoSP"   "HaemoSP"   
## [156] "NECSternDB" "NECSternDP" "NECSternSP" "NECLombDB"  "NECLombDP" 
## [161] "NECLombSP"  "PoidDB"     "PoidDP"     "PoidSP"     "EffTrSP"   
## [166] "ProdCTRLSP" "ProdSP"     "ProdMSP"    "EffTrDP"    "ProdCTRLDP"
## [171] "ProdDP"     "ProdMDP"    "EffTrDB"    "ProdCTRLDB" "ProdDB"    
## [176] "ProdMDB"    "TempsDP"    "NombreJDP"  "TempsSP"    "NombreJSP" 
## [181] "RR_CM"      "TM_MM"      "TN_MM"      "TX_MM"      "RGC_CM"
# Extraction robuste de l'année à partir de Mois
annee <- 2000 + as.numeric(sub("^[^0-9]+", "", data$Mois))

# Extraction du mois
mois_txt <- tolower(sub("[0-9]+$", "", data$Mois))

# Correction des accents
mois_txt[mois_txt == "février"] <- "fevrier"
mois_txt[mois_txt == "août"] <- "aout"
mois_txt[mois_txt == "décembre"] <- "decembre"

mois_num <- match(
  mois_txt,
  c("janvier", "fevrier", "mars", "avril", "mai", "juin",
    "juillet", "aout", "septembre", "octobre", "novembre", "decembre"))

table(annee, useNA = "ifany")
## annee
## 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 
##   12   12   12   12   12   12   12   12   12   12   12   12   12   12
table(mois_num, useNA = "ifany")
## mois_num
##    1    2    3    4    5    6    7    8    9   10   11   12 <NA> 
##   14   14   14   14   14   14   14   14   14   14   14   13    1

Code couleur pour tous les graphiques :

couleur_SP <- "red" 
couleur_DP <- "gold" 
couleur_DB <- "blue"

Evolution annuelle du parasitisme (SP et DP) :

Vérification

length(data$Mois)
## [1] 168
length(data$SGILOTSP)
## [1] 168
length(data$SGILOTDP)
## [1] 168

Créer l’année à partir du mois

annee_graph <- 2000 + as.numeric(
  sub("^[^0-9]+", "", data$Mois))

Retirer les données manquantes

# SP
ok_SP <- !is.na(annee_graph) &
  !is.na(data$SGILOTSP)

annee_SP <- annee_graph[ok_SP]
sgi_SP <- data$SGILOTSP[ok_SP]

# DP
ok_DP <- !is.na(annee_graph) &
  !is.na(data$SGILOTDP)

annee_DP <- annee_graph[ok_DP]
sgi_DP <- data$SGILOTDP[ok_DP]

Moyennes annuelles

moy_SP <- tapply(
  sgi_SP,
  annee_SP,
  mean,
  na.rm = TRUE)

moy_DP <- tapply(
  sgi_DP,
  annee_DP,
  mean,
  na.rm = TRUE)

Années disponibles

annees <- sort(
  union(
    as.numeric(names(moy_SP)),
    as.numeric(names(moy_DP))))

Enfin le graphique

plot(
  annees,
  moy_SP[as.character(annees)],
  type = "o",
  pch = 16,
  lwd = 2,
  col = "red",
  xlab = "Année",
  ylab = "Nombre moyen d'OPG",
  main = "Evolution de l'infestation par SGI en fonction du temps 
  selon les lots (SP et DP)")

lines(
  annees,
  moy_DP[as.character(annees)],
  type = "o",
  pch = 17,
  lwd = 2,
  col = "gold")

legend(
  "topright",
  legend = c("SP", "DP"),
  col = c("red", "gold"),
  pch = c(16, 17),
  lwd = 2,
  bty = "n")

Diagramme de Tuckey (comparaison SP et DP) :

boxplot(
  data$SGILOTSP,
  data$SGILOTDP,
  names = c("SP", "DP"),
  col = c(couleur_SP, couleur_DP),
  border = c("red", "gold"),
  ylab = "Nombre d'OPG",
  main = "Comparaison du SGI entre SP et DP"
)

Diagramme de Tuckey pour les 3 lots :

boxplot(
  data$SGILOTSP,
  data$SGILOTDP,
  data$SGITOTDB,
  names = c("SP", "DP", "DB"),
  col = c(couleur_SP, couleur_DP, couleur_DB),
  border = c("red", "gold", "blue"),
  ylab = "Nombre d'OPG",
  main = "Comparaison du SGI entre les trois lots"
)

Comparaison SP et DP selon les types de parasites :

Oesophagostomum :

boxplot(
  data$OesoSP,
  data$OesoDP,
  names = c("SP", "DP"),
  col = c("red", "gold"),
  border = c("darkred", "darkgoldenrod"),
  ylab = "Nombre d'OPG d'Oesophagostomum",
  main = "Oesophagostomum : SP vs DP"
)

Teladorsagia :

boxplot(
  data$TeladoSP,
  data$TeladoDP,
  names = c("SP", "DP"),
  col = c("red", "gold"),
  border = c("darkred", "darkgoldenrod"),
  ylab = "Nombre d'OPG de Teladorsagia",
  main = "Teladorsagia : SP vs DP"
)

Haemonchus :

boxplot(
  data$HaemoSP,
  data$HaemoDP,
  names = c("SP", "DP"),
  col = c("red", "gold"),
  border = c("darkred", "darkgoldenrod"),
  ylab = "Nombre d'OPG d'Haemonchus",
  main = "Haemonchus : SP vs DP"
)

Infestation selon la parité et la saison de mise bas :

boxplot(data$SGIMultiSP,
        data$SGIMultiDP,
        data$SGIPrimiSP,
        data$SGIPrimiDP,
        data$SGINulliSP,
        data$SGINulliDP,
        
        names = c("Multi SP", "Multi DP",
                  "Primi SP", "Primi DP",
                  "Nulli SP", "Nulli DP"),
        
        col = c("red", "gold",
                "red", "gold",
                "red", "gold"),
        
        border = c("darkred", "darkgoldenrod",
                   "darkred", "darkgoldenrod",
                   "darkred", "darkgoldenrod"),
        
        las = 2,
        ylab = "Nombre d'OPG"  ,
        main = "Infestation selon la parité et la saison de mise-bas")

Infestation et pâturage :

En fonction du temps :

# SP
ok_SP <- !is.na(data$TempsSP) &
  !is.na(data$SGILOTSP)

plot(data$TempsSP[ok_SP],
     data$SGILOTSP[ok_SP],
     pch = 16,
     col = "red",
     xlab = "Temps au pâturage",
     ylab = "Nombre d'OPG",
     main = "Relation entre temps au pâturage et l'infestation du lot SP")

abline(lm(data$SGILOTSP[ok_SP] ~ data$TempsSP[ok_SP]),
       lwd = 2)

# DP

ok_DP <- !is.na(data$TempsDP) &
  !is.na(data$SGILOTDP)

plot(data$TempsDP[ok_DP],
     data$SGILOTDP[ok_DP],
     pch = 17,
     col = "gold",
     xlab = "Temps au pâturage",
     ylab = "Nombre d'OPG",
     main = "Relation entre temps au pâturage et l'infestation du lot DP")

abline(lm(data$SGILOTDP[ok_DP] ~ data$TempsDP[ok_DP]),
       lwd = 2)

En fonction du nombre de jours au pâturage :

ok_SP <- !is.na(data$NombreJSP) &
  !is.na(data$SGILOTSP)

ok_DP <- !is.na(data$NombreJDP) &
  !is.na(data$SGILOTDP)

plot(data$NombreJSP[ok_SP],
     data$SGILOTSP[ok_SP],
     pch = 16,
     col = "red",
     xlab = "Nombre de jours au pâturage",
     ylab = "Nombre d'OPG",
     main = "Infestation en fonction du nombre de jours au pâturage")

points(data$NombreJDP[ok_DP],
       data$SGILOTDP[ok_DP],
       pch = 17,
       col = "gold")

abline(lm(data$SGILOTSP[ok_SP] ~ data$NombreJSP[ok_SP]),
       lwd = 2,
       col = "red")

abline(lm(data$SGILOTDP[ok_DP] ~ data$NombreJDP[ok_DP]),
       lwd = 2,
       col = "gold")

legend("topleft",
       legend = c("SP", "DP"),
       col = c("red", "gold"),
       pch = c(16, 17),
       bty = "n")

Infestation et température :

ok_SP <- !is.na(data$TM_MM) &
  !is.na(data$SGILOTSP)

ok_DP <- !is.na(data$TM_MM) &
  !is.na(data$SGILOTDP)

plot(data$TM_MM[ok_SP],
     data$SGILOTSP[ok_SP],
     pch = 16,
     col = "red",
     xlab = "Température moyenne (en°C)",
     ylab = "Nombre d'OPG",
     main = "Impact de la température sur l'infestation parasitaire ")

points(data$TM_MM[ok_DP],
       data$SGILOTDP[ok_DP],
       pch = 17,
       col = "gold")

abline(lm(data$SGILOTSP[ok_SP] ~ data$TM_MM[ok_SP]),
       lwd = 2,
       col = "red")

abline(lm(data$SGILOTDP[ok_DP] ~ data$TM_MM[ok_DP]),
       lwd = 2,
       col = "gold")

legend("topleft",
       legend = c("SP", "DP"),
       col = c("red", "gold"),
       pch = c(16, 17),
       bty = "n")

Infestation et précipitation :

ok_SP <- !is.na(data$RR_CM) &
  !is.na(data$SGILOTSP)

ok_DP <- !is.na(data$RR_CM) &
  !is.na(data$SGILOTDP)

plot(data$RR_CM[ok_SP],
     data$SGILOTSP[ok_SP],
     pch = 16,
     col = "red",
     xlab = "Précipitations (en mm)",
     ylab = "Nombre d'OPG",
     main = "Influence des précipitations surl'infestation parasitaire")

points(data$RR_CM[ok_DP],
       data$SGILOTDP[ok_DP],
       pch = 17,
       col = "gold")

legend("topleft",
       legend = c("SP", "DP"),
       col = c("red", "gold"),
       pch = c(16, 17),
       bty = "n")

Etat corporel et infestation :

NEC lombaire

ok_SP <- !is.na(data$NECLombSP) &
  !is.na(data$SGILOTSP)

ok_DP <- !is.na(data$NECLombDP) &
  !is.na(data$SGILOTDP)

plot(data$NECLombSP[ok_SP],
     data$SGILOTSP[ok_SP],
     pch = 16,
     col = "red",
     xlab = "Note d'état coporelle lombaire",
     ylab = "Nombre d'OPG",
     main = "Nombre d'OPG en fonction de la NEC lombaire")

points(data$NECLombDP[ok_DP],
       data$SGILOTDP[ok_DP],
       pch = 17,
       col = "gold")

abline(lm(data$SGILOTSP[ok_SP] ~ data$NECLombSP[ok_SP]),
       lwd = 2,
       col = "red")

abline(lm(data$SGILOTDP[ok_DP] ~ data$NECLombDP[ok_DP]),
       lwd = 2,
       col = "gold")

legend("topleft",
       legend = c("SP", "DP"),
       col = c("red", "gold"),
       pch = c(16, 17),
       bty = "n")

NEC Sternale

ok_SP <- !is.na(data$NECSternSP) &
  !is.na(data$SGILOTSP)

ok_DP <- !is.na(data$NECSternDP) &
  !is.na(data$SGILOTDP)

plot(data$NECSternSP[ok_SP],
     data$SGILOTSP[ok_SP],
     pch = 16,
     col = "red",
     xlab = "Note d'état coporelle sternale",
     ylab = "Nombre d'OPG",
     main = "Nombre d'OPG en fonction de la NEC sternale")

points(data$NECSternDP[ok_DP],
       data$SGILOTDP[ok_DP],
       pch = 17,
       col = "gold")

abline(lm(data$SGILOTSP[ok_SP] ~ data$NECSternSP[ok_SP]),
       lwd = 2,
       col = "red")

abline(lm(data$SGILOTDP[ok_DP] ~ data$NECSternDP[ok_DP]),
       lwd = 2,
       col = "gold")

legend("topleft",
       legend = c("SP", "DP"),
       col = c("red", "gold"),
       pch = c(16, 17),
       bty = "n")

Poids

ok_SP <- !is.na(data$PoidSP) &
  !is.na(data$SGILOTSP)

ok_DP <- !is.na(data$PoidDP) &
  !is.na(data$SGILOTDP)

plot(data$PoidSP[ok_SP],
     data$SGILOTSP[ok_SP],
     pch = 16,
     col = "red",
     xlab = "Poid",
     ylab = "Nombre d'OPG",
     main = "Nombre d'OPG en fonction du poids")

points(data$PoidDP[ok_DP],
       data$SGILOTDP[ok_DP],
       pch = 17,
       col = "gold")

abline(lm(data$SGILOTSP[ok_SP] ~ data$PoidSP[ok_SP]),
       lwd = 2,
       col = "red")

abline(lm(data$SGILOTDP[ok_DP] ~ data$PoidDP[ok_DP]),
       lwd = 2,
       col = "gold")

legend("topleft",
       legend = c("SP", "DP"),
       col = c("red", "gold"),
       pch = c(16, 17),
       bty = "n")

Différences d’infestation : SP-DP :

ok <- !is.na(mois_num) &
  !is.na(annee) &
  !is.na(data$SGILOTSP) &
  !is.na(data$SGILOTDP)

date_diff <- as.Date(
  paste(annee[ok],
        sprintf("%02d", mois_num[ok]),
        "01",
        sep = "-"))

difference <- data$SGILOTSP[ok] - data$SGILOTDP[ok]

couleurs <- ifelse(difference > 0, "red", "gold")

plot(date_diff,
     difference,
     type = "h",
     lwd = 3,
     col = couleurs,
     xlab = "Date",
     ylab = "OPG SP - OPG DP",
     main = "Différence d'infestation : SP - DP")

abline(h = 0, lty = 2, lwd = 2)

legend("topright",
       legend = c("SP > DP", "SP < DP"),
       col = c("red", "gold"),
       lwd = 3,
       bty = "n")

Ratio SP/DP :

ok <- !is.na(mois_num) &
  !is.na(annee) &
  !is.na(data$SGILOTSP) &
  !is.na(data$SGILOTDP) &
  data$SGILOTDP > 0

date_ratio <- as.Date(
  paste(annee[ok],
        sprintf("%02d", mois_num[ok]),
        "01",
        sep = "-"))

ratio <- data$SGILOTSP[ok] / data$SGILOTDP[ok]

plot(date_ratio,
     ratio,
     type = "o",
     pch = 16,
     col = "red",
     xlab = "Date",
     ylab = "Ratio OPG SP / DP",
     main = "Ratio d'infestation parasitaire SP / DP")

abline(h = 1, lty = 2, lwd = 2)

Infestation moyenne par mois :

mois_nom <- c("Jan", "Fev", "Mar", "Avr", "Mai", "Juin",
              "Juil", "Aout", "Sep", "Oct", "Nov", "Dec")

moy_SP <- numeric(12)
moy_DP <- numeric(12)

for (m in 1:12) {
  valeurs_SP <- data$SGILOTSP[mois_num == m]
  valeurs_DP <- data$SGILOTDP[mois_num == m]
  
  moy_SP[m] <- mean(valeurs_SP, na.rm = TRUE)
  moy_DP[m] <- mean(valeurs_DP, na.rm = TRUE)}

plot(1:12,
     moy_SP,
     type = "o",
     pch = 16,
     lwd = 2,
     col = "red",
     xaxt = "n",
     xlab = "Mois",
     ylab = "Nombre d'OPG moyen",
     main = "Nombre d'OPG moyen selon le mois")

lines(1:12,
      moy_DP,
      type = "o",
      pch = 17,
      lwd = 2,
      col = "gold")

axis(1, at = 1:12, labels = mois_nom)

legend("topright",
       legend = c("SP", "DP"),
       col = c("red", "gold"),
       pch = c(16, 17),
       lty = 1,
       bty = "n")

Heatmap : Infestation SP selon années et mois

annees_uniques <- sort(unique(annee[!is.na(annee)]))

mat_SP <- matrix(NA,
                 nrow = length(annees_uniques),
                 ncol = 12)

rownames(mat_SP) <- annees_uniques
colnames(mat_SP) <- mois_nom

for (i in 1:length(annees_uniques)) {
  
  for (m in 1:12) {
    
    valeurs <- data$SGILOTSP[
      annee == annees_uniques[i] &
        mois_num == m]
    
    if (sum(!is.na(valeurs)) > 0) {
      mat_SP[i, m] <- mean(valeurs, na.rm = TRUE) }}}

heatmap(mat_SP,
        Rowv = NA,
        Colv = NA,
        scale = "none",
        margins = c(6, 6),
        main = "Infestation moyenne du lot SP selon l'année et le mois")

Heatmap : Infestation DP selon années et mois

annees_uniques <- sort(unique(annee[!is.na(annee)]))

mat_DP <- matrix(NA,
                 nrow = length(annees_uniques),
                 ncol = 12)

rownames(mat_DP) <- annees_uniques
colnames(mat_DP) <- mois_nom

for (i in 1:length(annees_uniques)) {
  
  for (m in 1:12) {
    
    valeurs <- data$SGILOTSP[
      annee == annees_uniques[i] &
        mois_num == m]
    
    if (sum(!is.na(valeurs)) > 0) {
      mat_SP[i, m] <- mean(valeurs, na.rm = TRUE)}}}

heatmap(mat_SP,
        Rowv = NA,
        Colv = NA,
        scale = "none",
        margins = c(6, 6),
        main = "Infestation moyenne du lot DP selon l'année et le mois")

Analyses statistiques :

Analyses descriptives

SP <- data$SGILOTSP[!is.na(data$SGILOTSP)]
DP <- data$SGILOTDP[!is.na(data$SGILOTDP)]

cat("===== SP =====\n")
## ===== SP =====
cat("N =", length(SP), "\n")
## N = 150
cat("Moyenne =", mean(SP), "\n")
## Moyenne = 448.0747
cat("Médiane =", median(SP), "\n")
## Médiane = 350
cat("Ecart-type =", sd(SP), "\n")
## Ecart-type = 425.2526
cat("Minimum =", min(SP), "\n")
## Minimum = 0
cat("Maximum =", max(SP), "\n\n")
## Maximum = 2428
cat("===== DP =====\n")
## ===== DP =====
cat("N =", length(DP), "\n")
## N = 151
cat("Moyenne =", mean(DP), "\n")
## Moyenne = 180.9073
cat("Médiane =", median(DP), "\n")
## Médiane = 139
cat("Ecart-type =", sd(DP), "\n")
## Ecart-type = 161.968
cat("Minimum =", min(DP), "\n")
## Minimum = 0
cat("Maximum =", max(DP), "\n")
## Maximum = 700