#install.packages("devtools") # if not already installed
devtools::install_github("vignevin/startbox")
Introduction
Le package {startbox} est dédié à la gestion et à l’analyse des données d’essais en protection phytosanitaire, en particulier pour la vigne.
Principe de base
Les données sont stockées dans un fichier Excel standard, dont il est possible de télécharger un modèle avec la fonction get_template_excel()
.
Une analyse se déroule selon les étapes suivantes :
- Charger les données dans R
- Préparer les données
- Réaliser les analyses statistiques
- Visualiser les graphiques de résultats
Installation du package
Charger les données
Chargement des données dans l’environnement de travail
Les données sont chargées dans R dans un objet appartenant à la classe user_data, spécifique au package startbox. Cet objet contient les données brutes, mais aussi sert à stocker les données préparées et les résultats des analyses statistiques.
# Création d'un objet avec fichier Excel existant
# ici le fichier Excel est un fichier exemple fourni avec le package
mydata <- user_data$new(trial_file = system.file("extdata","standard_exemple.xlsx",package="startbox"))
#> 📄 Using provided Excel file: standard_exemple.xlsx
#> Column observation_date converted with format %d/%m/%Y
#> ✅ New sheet loaded: data_F1
#> Column observation_date converted with format %d/%m/%Y
#> ✅ New sheet loaded: data_F2
#> Column observation_date converted with format %d/%m/%Y
#> ✅ New sheet loaded: data_F3
#> Column observation_date converted with format %d/%m/%Y
#> ✅ New sheet loaded: data_G1
#> Column observation_date converted with format %d/%m/%Y
#> ✅ New sheet loaded: data_G2
#> Column observation_date converted with format %d/%m/%Y
#> ✅ New sheet loaded: data_G3
#> ✅ Sheet 'placette' loaded into metadata$placette.
#> ✅ Sheet 'modalite' loaded into metadata$modalite.
Pour adapter ce code à votre cas, modifier le paramètre trial_file
avec le chemin de votre fichier Excel. Une fonction pratique est d’utiliser trial_file = file.choose()
pour une sélection interactive du fichier.
Important
Un fichier Excel ouvert ne peut pas être chargé ni modifié par {startbox} : n’oubliez-pas de fermer votre fichier avant de lancer la fonction
user_data$new()
.
Accéder aux données chargées
Les données sont dans notre exemple stockées dans l’objet que nous avons appelé mydata
.
Cet objet contient nos données, avec en particulier :
les données d’observations dans
obs_data
les métadonnées, issues des feuilles Excel placette et modalité dans
metadata
# affichage des premières lignes des données d'observation data_F1_2024 :
head(mydata$obs_data$data_G1)
#> plot_id PM_BER_PC bbch_stage observation_date
#> 1 10A 0 BBCH 77 2024-06-25
#> 2 10A 0 BBCH 77 2024-06-25
#> 3 10A 60 BBCH 77 2024-06-25
#> 4 10A 30 BBCH 77 2024-06-25
#> 5 10A 0 BBCH 77 2024-06-25
#> 6 10A 0 BBCH 77 2024-06-25
Préparer les données
Une fois les données chargées, il est nécessaire de les préparer avant analyse. Généralement, pour un essai en protection phytosanitaire, la fréquence et l’intensité de la maladie sont calculées par placette. La fonction prepare_data()
réalise ce calcul par défaut, mais vous pouvez aussi le personnaliser (voir l’aide de la fonction).
Préparer les données à partir d’un jeu de données observation
prepare_data(mydata, df="data_G1")
#> dataframe data_G1 found in observations data
#> variables found:PM_BER_PC
#> Variable choosenPM_BER_PC
#> plot_id: 10A,10B,10C,10D,1A,1B,1C,1D,2A,2B,2C,2D,3A,3B,3C,3D,4A,4B,4C,4D,5A,5B,5C,5D,6A,6B,6C,6D,7A,7B,7C,7D,8A,8B,8C,8D,9A,9B,9C,9D not in the reference plot description
#> flex automatically set to TRUE to try to find equivalence in plot_id such as 10A = A10
#> plot_id: 10A,10B,10C,10D,1A,1B,1C,1D,2A,2B,2C,2D,3A,3B,3C,3D,4A,4B,4C,4D,5A,5B,5C,5D,6A,6B,6C,6D,7A,7B,7C,7D,8A,8B,8C,8D,9A,9B,9C,9D not in the reference plot description
#> WARNING : at least one plot_id in the dataset was not found in the sheet placette (plot_desc in metadata)
#> flex merging for plot_id. 10A = A10 = a10
#> Prepared data saved in [data_user object]$prepared_data$prp1_data_G1
# df : le nom du dataframe à préparer)
Préparer les données à partir d’un jeu de données préparées
Ce cas de figure intervient généralement quand on souhaite calculer une efficacité. En effet, il faut d’abord calculer la fréquence et l’intensité par placette, puis calculer l’efficacité à partir de ces données.
prepare_data(mydata,
df="prp1_data_G1", # le nom du dataframe à préparer
funs = list(efficacité = efficacy), # calcul de l'efficacité
tnt_mode = "block")
#> dataframe prp1_data_G1 found in prepared data
#> plot_id: 10A,10B,10C,10D,1A,1B,1C,1D,2A,2B,2C,2D,3A,3B,3C,3D,4A,4B,4C,4D,5A,5B,5C,5D,6A,6B,6C,6D,7A,7B,7C,7D,8A,8B,8C,8D,9A,9B,9C,9D not in the reference plot description
#> flex automatically set to TRUE to try to find equivalence in plot_id such as 10A = A10
#> generation of block_association table
#> [1] "block TNT used for calculation of efficacy"
#> flex merging for plot_id. 10A = A10 = a10
#> Prepared data saved in [data_user object]$prepared_data$prp2_prp1_data_G1
Accéder aux données préparées
Les données préparées sont accessibles dans mydata
, sous forme d’une liste prepared_data
head(mydata$prepared_data$prp2_prp1_data_G1)
#> plot_id calculation mean_tnt value nb clean_id
#> 1 A1 efficacité frequence PM_BER_PC 86.00 37.20930 1 A1
#> 2 A1 efficacité intensite PM_BER_PC 23.08 62.73830 1 A1
#> 3 A10 efficacité frequence PM_BER_PC 86.00 23.25581 1 A10
#> 4 A10 efficacité intensite PM_BER_PC 23.08 28.50953 1 A10
#> 5 A2 efficacité frequence PM_BER_PC 86.00 58.13953 1 A2
#> 6 A2 efficacité intensite PM_BER_PC 23.08 84.83536 1 A2
#> xp_trt_code block_code plot_x plot_y plot_n plot_desc xp_trt_name
#> 1 1 A 2 1 7 <NA> Cuivre tardif
#> 2 1 A 2 1 7 <NA> Cuivre tardif
#> 3 10 A 2 10 7 <NA> Tanins chataignier
#> 4 10 A 2 10 7 <NA> Tanins chataignier
#> 5 2 A 2 6 7 <NA> Cuivre
#> 6 2 A 2 6 7 <NA> Cuivre
#> xp_trt_desc
#> 1 cuivre 2 semains après symptômes
#> 2 cuivre 2 semains après symptômes
#> 3 <NA>
#> 4 <NA>
#> 5 cuivre à partir de symptômes
#> 6 cuivre à partir de symptômes
Analyser les données
Une fois le jeu de données préparé, il est possible de réaliser l’analyse statistique.
Réaliser l’analyse
test_stats(mydata, prep_data = "prp2_prp1_data_G1")
#> Shapiro test p-value is greater than 0.05 : the model residuals appear to follow a normal distribution
#> Bartlett test p-value is less than 0.05 : significant differences in variance between groups are detected
#> Shapiro test p-value is less than 0.05 : the model residuals do not appear to follow a normal distribution
#> Bartlett test p-value is less than 0.05 : significant differences in variance between groups are detected
#> Stats saved in : [data_user object]stats$prp2_prp1_data_G1
Afficher les résultats
Les résultats des analyses statistiques sont stockées dans mydata
, dans une liste stats
. Pour chaque exécution de test_stats()
, un nouvel élément est ajouté à la liste. Chaque élément contient :
prep_data : le nom du jeu de données préparées qui a été analysé
df.stats : une table avec les tests réalisées et les p-values calculées pour chaque variable
df.grp_means : une table avec les moyennes par modalités et les groupes statistiques
head(mydata$stats$prp2_prp1_data_G1$df.grp_means)
#> rank factor_level mean std r Min Max Q25
#> 1 13.000 Cuivre tardif 29.85157 11.201333 4 13.33333 37.20930 27.70833
#> 2 16.375 Salix/Equisetum 31.41943 20.356856 4 13.63636 60.00000 19.10677
#> 3 16.500 Mimetic 36.10098 4.141485 4 31.11111 40.90909 33.94057
#> 4 2.500 Témoin non traité 0.00000 0.000000 4 0.00000 0.00000 0.00000
#> 5 21.000 Tanins chataignier 37.91623 10.329178 4 23.25581 47.50000 35.81395
#> 6 25.000 Cuivre précoce 42.56225 4.865451 4 35.55556 46.51163 41.27525
#> Q50 Q75 factor calculation groups
#> 1 34.43182 36.57505 xp_trt_name efficacité frequence PM_BER_PC ab
#> 2 26.02067 38.33333 xp_trt_name efficacité frequence PM_BER_PC ab
#> 3 36.19186 38.35227 xp_trt_name efficacité frequence PM_BER_PC ab
#> 4 0.00000 0.00000 xp_trt_name efficacité frequence PM_BER_PC b
#> 5 40.45455 42.55682 xp_trt_name efficacité frequence PM_BER_PC ab
#> 6 44.09091 45.37791 xp_trt_name efficacité frequence PM_BER_PC ab
Afficher les graphiques
Barplot
plot_xpbar(mydata,stat = "prp2_prp1_data_G1")
Heat map
plot_xpheat(mydata,stat = "prp2_prp1_data_G1")