Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Functions for automated statistical analysis of Xenopus Eleutherembryonic Thyroid Assays (XETA), Rapid Androgen Disruption Activity Reporter (RADAR) assays and Rapid Estrogen Activity In Vitro (REACTIV) assays.

NotificationsYou must be signed in to change notification settings

basf/xeredar

Repository files navigation

R-CMD-check

Background

The package xeredar is an R-package for analysis of the New ApproachMethodology (NAM) assays of XETA (Xenopus Eleutheroembryonic Thyroid),RADAR (Rapid Androgen Disruption Activity Reporter) and REACTIV (RapidEstrogen ACTivity In Vivo) for assessing endocrine effects of chemicalson the thyroid, androgen/steroid and estrogen axis. The functionality isbased on the SAS-script recommended in the Annex 13 of OECD testguideline No. 248 of the XETA assay(2019),written by John Green.

Installation

You can install xeredar using one of the followig commands:

devtools::install_github("basf/xeredar")pak::pkg_install("basf/xeredar")

Data requirements

Data frames that are supposed to be analyzed with xeredar needs tofulfill certain requirements. The data frame or tibble needs to containthe following column headers:

knitr::kable(head(xeredar::testDataSpiked))
ReplicateTreatmentRowFluorConc
1110 + T3419.7680
1210 + T3427.9280
1310 + T3429.5920
1410 + T3422.8160
1510 + T3426.0800
1610 + T3425.3320

The type of each column should be accordingly:

knitr::kable(purrr::map_df(xeredar::testDataSpiked, class))
ReplicateTreatmentRowFluorConc
factorcharactercharacternumericordered
factorcharactercharacternumericfactor

Replicate (i.e. run),Treatment (i.e. a unique name for eachtreatment level in either spiked or unspiked mode) andRow(i.e. exposure vessel) can either befactor orcharacter columns,butFluor (i.e. measured fluorescence) must always benumeric andConc (i.e. concentration of test item) must always containorderedfactors. The order of the columns is not relevant.

Replicate,Treatment andRow can either befactor orcharacter columns, butFluor must always benumeric andConcmust always containordered factors. The order of the columns is notrelevant. It is important that the decimal separator is a period insteadof a comma.

When simply aiming to use thedata_prep() function, the data frameneeds to either contain spiked treatments or unspiked treatments. Whenstill having spiked and unspiked treatments in one data frame theyshould be separated. Imagine you have a XETA data frame (dat) whichcontains spiked and unspiked treatments as well as the T4 positivecontrol. The T3 or T4 additions are designated by “T3” and “T4” in theTreatment column. The spiked and unspiked datasets could quickly besubset using the following code:

datSpiked <- dat[grepl("T3",dat$Treatment),] # spiked data datUnspiked <- setdiff(dat,datSpiked)datUnspiked <- datUnspiked[which(datUnspiked$Treatment != "T4"),] # unspiked data

Running default XETA analysis

To demonstrate how to run XETA analysis, we will use one of the datasets by the French lab containing the spiked and unspiked measurementsfrom the XETA ring test as included in OECD test guideline No. 248 ofthe XETA assay(2019).

xeta_spiked <- xeredar::valid_data_xeta[["ptu_france_spiked"]]xeta_unspiked <- xeredar::valid_data_xeta[["ptu_france_unspiked"]]

The default XETA analysis can be run using thedata_prep() functionwith either spiked or unspiked data. This function automatically decideswhether trimming, outlier removal and/or transformations are conductedfollowing the manuscript (Spyridonov et al. 2025).The actual analysis is carried out by theana() function. Theana() function iscalled by thedata_prep() function and does not need to be calledseparately. For this dataset, the exposure well ID (Row of the 96 wellplate) is not recorded, therefore, we set therow argument toFALSE.In this case, we use the reduced mixed ANOVA model where the exposurewell ID is not included as a random effect. Please specifyrow=TRUE ifthe exposure well ID is recorded and you want to use the full mixedANOVA model.

xeta_spiked_result <- xeredar::data_prep(dataframe = xeta_spiked, row = FALSE)xeta_unspiked_result <- xeredar::data_prep(dataframe = xeta_unspiked, row= FALSE)

Here we use the spike data as an example to demonstrate the output ofthedata_prep() function.

The outputs of thedata_prep() function are lists containing thefollowing elements:

  • A reasoning for the recommended transformation and trimming. The rawdata should be used for the analysis because the residuals of themixed ANOVA are normally distributed and show homogeneous variancesamong treatment groups.
xeta_spiked_result$Justify#> [1] "The raw data should be used for the analysis because\n                  the residuals of the mixed ANOVA are normally\n                  distributed and show homogeneous variances\n                  among treatment groups."
  • A data frame of the processed data (e.g. raw data, trimmed,transformed, or outlier removed) used for actual statistical testingfollowing the reasoning. The box plots of the processed data perrun/replicate (i.e. each panel represents each run/replicate) arealso provided for visual inspection.
knitr::kable(head(xeta_spiked_result$ProcessedData))
ReplicateTreatmentFluorConcCountrySubstanceSpiked
1FETAXT34989.5330franceptuTRUE
1FETAXT35002.5330franceptuTRUE
1FETAXT36331.5330franceptuTRUE
1FETAXT34645.5330franceptuTRUE
1FETAXT34977.5330franceptuTRUE
1FETAXT36229.5330franceptuTRUE
xeta_spiked_result$BoxPlots

  • Summary tables of the processed data (per replicate and overall)
knitr::kable(xeta_spiked_result$SummaryDF_Rep, caption="Summary statistics of fluorescence in different concentrations of test item per replicate")
Summary statistics of fluorescence in different concentrations of test item per replicate
ConcReplicateNMeanStandard deviationCoefficient of variation
01194651.060944.74200.2031240
02204024.300603.67310.1500070
03194952.2251179.35970.2381475
11193854.137828.39440.2149364
12204557.867558.49210.1225337
13194720.819619.89920.1313118
31194671.428976.96740.2091368
32194486.538783.86410.1747147
33205421.433703.94900.1298456
101204573.083946.20290.2069070
102194329.538827.48980.1911266
103195106.849876.59400.1716507
301205391.183809.58490.1501683
302194556.275694.16980.1523547
303195164.691763.88370.1479050
1001195181.060858.54540.1657085
1002195124.381733.46110.1431317
1003206048.083959.59000.1586602
knitr::kable(xeta_spiked_result$SummaryDF, caption="Summary statistics of fluorescence in different concentrations of test item of all replicates")
Summary statistics of fluorescence in different concentrations of test item of all replicates
ConcNMeanStandard deviationCoefficient of variation
0584533.593998.29010.2201984
1584380.715764.21470.1744498
3584869.483910.75680.1870336
10584668.156928.90660.1989879
30585043.483825.44250.1636652
100585461.466945.73700.1731654
  • Tables of results evaluated using increasing/decreasing Williamstest and/or Dunnett’s test, if applicable.

In the the Williams’ test result tables,Y.Tilde is the amalgamatedmean of the fluorescence in each treatment group,Y0 is the mean ofthe control fluorescence,DIFF is the estimated difference between thetreatment and the control,SE_DIFF is the standard error of theWilliams’ test,DF is the degrees of freedom for Williams’ test,WILLIncr orWill Decr is the Williams’ test statistic,crit Val is thecritical value of Williams distribution,Sign suggests if there issignificant difference between the treatment and the control, and%Incr is the percent increase of the fluorescence compared to thecontrol.

In the Dunnett’s test result table,Estimate is the estimateddifference between the treatment and the control,SE is the standarderror of the mixed ANOVA model,t value is the Dunnett’s teststatistic,adj p is the adjusted p value and%Incr is the percentincrease of the fluorescence compared to the control.

knitr::kable(xeta_spiked_result$WilliamsIncrease, caption="Increasing Williams' test")
Increasing Williams’ test
ConcY.TildeY0DIFF IncrSE_DIFFDFWILL Incrcrit ValSign% Incr
Conc100 - Conc01005461.474533.593927.8769249.7868103.71467581.971TRUE20.466613
Conc30 - Conc0305043.484533.593509.8869249.7868102.04128861.965TRUE11.246933
Conc10 - Conc0104768.824533.593235.2269249.7868100.94171081.956FALSE2.968123
Conc3 - Conc034768.824533.593235.2269249.7868100.94171081.940FALSE7.408918
Conc1 - Conc014380.724533.593-152.8731249.784510-0.61202011.908FALSE-3.372111
knitr::kable(xeta_spiked_result$WilliamsDecrease, caption="Decreasing Williams' test")
Decreasing Williams’ test
ConcY.TildeY0DIFF DecrSE_DIFFDFWILL Decrcrit ValSign% Incr
Conc100 - Conc01004884.664533.593-351.0669249.786810-1.4054661.971FALSE20.466613
Conc30 - Conc0304884.664533.593-351.0669249.786810-1.4054661.965FALSE11.246933
Conc10 - Conc0104884.664533.593-351.0669249.786810-1.4054661.956FALSE2.968123
Conc3 - Conc034884.664533.593-351.0669249.786810-1.4054661.940FALSE7.408918
Conc1 - Conc014884.664533.593-351.0669249.784510-1.4054791.908FALSE-3.372111
knitr::kable(xeta_spiked_result$Dunnetts, caption="Dunnett's test")
Dunnett’s test
EstimateSEdft valueadj p% Incr
Conc1 - Conc0-160.4067249.784510-0.64218060.9458404-3.372111
Conc3 - Conc0320.1063249.7868101.28151810.59707187.408918
Conc10 - Conc0128.8281249.7868100.51575220.97697222.968123
Conc30 - Conc0499.2993249.7868101.99890210.236799311.246933
Conc100 - Conc0911.7088249.7868103.64994820.017413120.466613
  • Further information about the normality test (Shapiro-Wilk), thehomogeneity of variance test (Levene’s test) of residuals of themixed ANOVA model, the monotonicity test and the model fit.
xeta_spiked_result$NormalityTest#> #>  Shapiro-Wilk normality test#> #> data:  stats::resid(mixedaov)#> W = 0.99186, p-value = 0.05343xeta_spiked_result$LeveneTest#> # A tibble: 1 × 4#>   statistic p.value    df df.residual#>       <dbl>   <dbl> <int>       <int>#> 1     0.759   0.580     5         342xeta_spiked_result$`Monotonicity Test`#>        Test t value Pr(>|t|) Significance#> 1    Linear    6.49  <0.0001          ***#> 2 Quadratic    2.14   0.0335            *xeta_spiked_result$MixedAnova#> Linear mixed model fit by REML ['lmerMod']#> Formula: #> Fluor ~ Conc + (1 | Replicate) + (1 | Replicate:Conc)#>    Data: dataframe#> REML criterion at convergence: 5608.294#> Random effects:#>  Groups         Name        Std.Dev.#>  Replicate:Conc (Intercept) 241.1   #>  Replicate      (Intercept) 350.5   #>  Residual                   827.7   #> Number of obs: 348, groups:  #> Replicate:Conc, 18; Replicate, 3#> Fixed Effects:#> (Intercept)       Conc.L       Conc.Q       Conc.C  #>      4824.2        758.5        264.5         52.6  #>      Conc^4       Conc^5  #>       149.8       -270.8

The list output from running the data_prep() function can besummarized with the data_summary() function.

xeredar::data_summary(xeta_spiked_result) |> knitr::kable()
131030100
Replicate 1-17.130.44-1.6815.9111.4
Replicate 213.2611.497.5813.2227.34
Replicate 3-4.679.473.124.2922.13
Pooled-3.377.412.9711.2520.47
Dunnettnsnsnsns*
IncreasingWilliamsnsnsns**
DecreasingWilliamsnsnsnsnsns

Running default RADAR analysis

To demonstrate how to run RADAR analysis, we will use one of the datasets by the Pos_mDHT_Fraunhofer_RADAR containing the spiked andunspiked measurements from the RADAR study validation in the labFraunhofer with an androgen axis active chemical.

radar_spiked <- xeredar::RADAR_valid_data_table_spiked_unspiked[["mDHTFRAUNH_Spiked"]]radar_unspiked <-  xeredar::RADAR_valid_data_table_spiked_unspiked[["mDHTFRAUNH_Unspiked"]]

The default radar analysis can be run using thedata_prep() functionwith either spiked or unspiked data. This function automatically decideswhether trimming, outlier removal and/or transformations are conductedfollowing the manuscript (Spyridonov et al. unpublished). The actualanalysis is carried out by theana() function. Theana() function iscalled by thedata_prep() function and does not need to be calledseparately. the analysis the RADAR assay follows the description of theMethod 2 (the mixed ANOVA approach) in the Annex 8: methods for thestatistical analysis of RADAR assay data of the OECD TG 251(2022).For this dataset, the exposure well ID (Row of the 96 well plate) is notrecorded, therefore, we set therow argument toFALSE. In this case,we use the reduced mixed ANOVA model where the exposure well ID is notincluded as a random effect. Please specifyrow=TRUE if the exposurewell ID is recorded and you want to use the full mixed ANOVA model.Trimming is not required.

radar_spiked_result <- xeredar::data_prep(dataframe = radar_spiked, row = FALSE, trimming=FALSE)radar_unspiked_result <- xeredar::data_prep(dataframe = radar_unspiked, row= FALSE, trimming=FALSE)

Here we use the spike data as an example to demonstrate the output ofthedata_prep() function.

The outputs of thedata_prep() function are lists containing thefollowing elements:

  • A reasoning for the recommended transformation and trimming. The rawdata (without trimming or outlier removal) where the fluorescencevalues are log transformed should be used for the analysis becauseonly after log transformation, the residuals of the mixed ANOVA arenormally distributed and have homogeneous variances among treatmentgroups.
radar_spiked_result$Justify#> [1] "The raw data (without trimming or outlier removal) where\n                    the fluorescence values are log transformed should be used\n                    for the analysis because only after log transformation,\n                    the residuals of the mixed ANOVA are normally distributed\n                    and have homogeneous variances among treatment groups."
  • A data frame of the processed data (e.g. raw data, transformed, oroutlier removed) used for actual statistical testing following thereasoning. The box plots of the processed data per run/replicate(i.e. each panel represents each run/replicate) are also providedfor visual inspection.
knitr::kable(head(radar_spiked_result$ProcessedData))
labCompoundTreatmentFluorConcReplicate
FRAUNHmDHTFETAX MT11315201
FRAUNHmDHTmDHT-1µg/L + 17MT70811
FRAUNHmDHTmDHT-2µg/L + 17MT249821
FRAUNHmDHTmDHT-4µg/L + 17MT1015241
FRAUNHmDHTmDHT-8µg/L + 17MT35681
FRAUNHmDHTmDHT-16µg/L + 17MT4621161
radar_spiked_result$BoxPlots

  • Summary tables of the processed data (per replicate and overall)
knitr::kable(radar_spiked_result$SummaryDF_Rep, caption="Summary statistics of fluorescence in different concentrations of test item per replicate")
Summary statistics of fluorescence in different concentrations of test item per replicate
ConcReplicateNMeanStandard deviationCoefficient of variation
011723818.47143072.4561.808364
021715009.82437062.0852.469189
031729657.29437428.1161.262021
11176505.47110835.3211.665571
121710271.00014904.1561.451091
131720555.88229472.5081.433775
211729385.94147143.8111.604298
22178911.11810565.7181.185678
231741815.70654205.0561.296285
411715968.94133341.9722.087926
421714532.76521802.6221.500239
431719419.47128057.7241.444824
81175178.1188983.7871.734952
82178220.88215084.2701.834872
831716399.64723315.3851.421700
161176119.0008448.4811.380696
162177955.70615390.4051.934512
1631717665.41219842.7081.123252
knitr::kable(radar_spiked_result$SummaryDF, caption="Summary statistics of fluorescence in different concentrations of test item of all replicates")
Summary statistics of fluorescence in different concentrations of test item of all replicates
ConcNMeanStandard deviationCoefficient of variation
05122828.52938967.631.706971
15112444.11820556.801.651929
25126704.25543299.931.621462
45116640.39227641.601.661115
8519932.88217189.941.730609
165110580.03915836.941.496870
  • Tables of results evaluated using increasing/decreasing Williamstest and/or Dunnett’s test, if applicable.

In the the Williams’ test result tables,Y.Tilde is the amalgamatedmean of the fluorescence in each treatment group,Y0 is the mean ofthe control fluorescence,DIFF is the estimated difference between thetreatment and the control,SE_DIFF is the standard error of theWilliams’ test,DF is the degrees of freedom for Williams’ test,WILLIncr orWill Decr is the Williams’ test statistic,crit Val is thecritical value of Williams distribution,Sign suggests if there issignificant difference between the treatment and the control, and%Incr is the percent increase of the fluorescence compared to thecontrol.

In the Dunnett’s test result table,Estimate is the estimateddifference between the treatment and the control,SE is the standarderror of the mixed ANOVA model,t value is the Dunnett’s teststatistic,adj p is the adjusted p value and%Incr is the percentincrease of the fluorescence compared to the control.

knitr::kable(radar_spiked_result$WilliamsIncrease, caption="Increasing Williams' test")
Increasing Williams’ test
ConcY.TildeY0DIFF IncrSE_DIFFDFWILL Incrcrit ValSign% Incr
Conc16 - Conc0168.388588.51927-0.130690.347832710-0.37572671.971FALSE-53.65431
Conc8 - Conc088.388588.51927-0.130690.347832710-0.37572671.965FALSE-56.48917
Conc4 - Conc048.388588.51927-0.130690.347832710-0.37572671.956FALSE-27.10703
Conc2 - Conc028.388588.51927-0.130690.347832710-0.37572671.940FALSE16.97755
Conc1 - Conc018.074338.51927-0.444940.347832710-1.27917831.908FALSE-45.48875
knitr::kable(radar_spiked_result$WilliamsDecrease, caption="Decreasing Williams' test")
Decreasing Williams’ test
ConcY.TildeY0DIFF DecrSE_DIFFDFWILL Decrcrit ValSign% Incr
Conc16 - Conc0167.995668.519270.523610.3478327101.50535031.971FALSE-53.65431
Conc8 - Conc087.995668.519270.523610.3478327101.50535031.965FALSE-56.48917
Conc4 - Conc048.545778.51927-0.026500.347832710-0.07618611.956FALSE-27.10703
Conc2 - Conc028.545778.51927-0.026500.347832710-0.07618611.940FALSE16.97755
Conc1 - Conc018.545778.51927-0.026500.347832710-0.07618611.908FALSE-45.48875
knitr::kable(radar_spiked_result$Dunnetts, caption="Dunnett's test")
Dunnett’s test
EstimateSEdft valueadj p% Incr
Conc1 - Conc0-0.44493580.347832710-1.2791660.5986692-45.48875
Conc2 - Conc00.47079770.3478327101.3535180.552000516.97755
Conc4 - Conc00.05365140.3478327100.1542450.9999132-27.10703
Conc8 - Conc0-0.57766100.347832710-1.6607440.3794252-56.48917
Conc16 - Conc0-0.46954960.347832710-1.3499300.5543160-53.65431
  • Further information about the normality test (Shapiro-Wilk), thehomogeneity of variance test (Levene’s test) of residuals of themixed ANOVA model, the monotonicity test and the model fit.
radar_spiked_result$NormalityTest#> #>  Shapiro-Wilk normality test#> #> data:  stats::resid(mixedaov)#> W = 0.99071, p-value = 0.05007radar_spiked_result$LeveneTest#> # A tibble: 1 × 4#>   statistic p.value    df df.residual#>       <dbl>   <dbl> <int>       <int>#> 1     0.474   0.796     5         300radar_spiked_result$`Monotonicity Test`#>        Test t value Pr(>|t|) Significance#> 1    Linear   -1.57   0.1167            .#> 2 Quadratic   -1.48   0.1400            .radar_spiked_result$MixedAnova#> Linear mixed model fit by REML ['lmerMod']#> Formula: #> log(Fluor) ~ Conc + (1 | Replicate) + (1 | Replicate:Conc)#>    Data: dataframe#> REML criterion at convergence: 1218.932#> Random effects:#>  Groups         Name        Std.Dev.#>  Replicate:Conc (Intercept) 0.000   #>  Replicate      (Intercept) 0.466   #>  Residual                   1.756   #> Number of obs: 306, groups:  #> Replicate:Conc, 18; Replicate, 3#> Fixed Effects:#> (Intercept)       Conc.L       Conc.Q       Conc.C  #>     8.35799     -0.37806     -0.37347      0.01863  #>      Conc^4       Conc^5  #>     0.68924     -0.25055  #> optimizer (nloptwrap) convergence code: 0 (OK) ; 0 optimizer warnings; 1 lme4 warnings

The list output from running the data_prep() function can besummarized with the data_summary() function.

xeredar::data_summary(radar_spiked_result) |>  knitr::kable()
124816
Replicate 1-72.6923.37-32.96-78.26-74.31
Replicate 2-31.57-40.63-3.18-45.23-47
Replicate 3-30.6941-34.52-44.7-40.43
Pooled-45.4916.98-27.11-56.49-53.65
Dunnettnsnsnsnsns
IncreasingWilliamsnsnsnsnsns
DecreasingWilliamsnsnsnsnsns

Running default REACTIV analysis

To demonstrate how to run REACTIV analysis, we will use one artificialdata set containing the spiked and unspiked measurements.

reactiv_spiked <- xeredar::REACTIV_valid_data_table_spiked_unspiked[["Anastrozole_UK"]]$Spiked reactiv_unspiked <- xeredar::REACTIV_valid_data_table_spiked_unspiked[["Anastrozole_UK"]]$Unspiked

The default REACTIV analysis can be run using thedata_prep() functionwith either spiked or unspiked data. This function automatically decideswhether trimming, outlier removal and/or transformations are conductedfollowing the manuscript (Spyridonov et al. unpublished). The actualanalysis is carried out by theana() function. Theana() function iscalled by thedata_prep() function and does not need to be calledseparately. The analysis the REACTIV assay follows the description ofthe Method 2 (the mixed ANOVA approach) in the Annex 8: methods for thestatistical analysis of REACTIV assay data of the Amended Draft new TestGuideline for the REACTIV assay for second WNT-review(30.01.2024).For this assay, therow argument should be set toFALSE. Trimming isnot required. In case there are residuals deviate from normality andvariance homogeneity, outlier removal (e.g. by applying the Tukey rule(Green et al., 2018) and data transformation (for example log- orsquare-root) can be conducted.

reactiv_spiked_result <- xeredar::data_prep(dataframe = reactiv_spiked, row = FALSE, trimming=FALSE, boxcox = FALSE)reactiv_unspiked_result <- xeredar::data_prep(dataframe = reactiv_unspiked, row= FALSE, trimming=FALSE, boxcox = FALSE)

Here we use the spiked data as an example to demonstrate the output ofthedata_prep() function.

The outputs of thedata_prep() function are lists containing thefollowing elements:

  • A reasoning for the recommended transformation and trimming. Thedata from which outliers were removed with the Tukey-rule where thefluorescence values are square-root transformed, should be used forthe analysis because only after outlier removal and sqrttransformation, the residuals of the mixed ANOVA are normallydistributed and have homogeneous variances among treatment groups
reactiv_spiked_result$Justify#> [1] "The data from which outliers were removed with the\n                    Tukey-rule where the fluorescence values are square-root\n                    transformed, should be used for the analysis because only\n                    after outlier removal and sqrt transformation, the\n                    residuals of the mixed ANOVA are normally distributed\n                    and have homogeneous variances among treatment groups"
  • A data frame of the processed data (e.g. raw data, transformed, oroutlier removed) used for actual statistical testing following thereasoning. The box plots of the processed data per run/replicate(i.e. each panel represents each run/replicate) are also providedfor visual inspection.
knitr::kable(head(reactiv_spiked_result$ProcessedData))
TreatmentFluorConcReplicateCompoundCountry
AN-0,18mg/L + Testostérone27037.330.181AnastrozoleUK
AN-0,36mg/L + Testostérone201316.670.361AnastrozoleUK
AN-0,73mg/L + Testostérone34651.000.731AnastrozoleUK
AN-1,45mg/L + Testostérone289984.671.451AnastrozoleUK
AN-2,9mg/L + Testostérone233271.002.91AnastrozoleUK
AN-0,18mg/L + Testostérone64846.330.181AnastrozoleUK
reactiv_spiked_result$BoxPlots

  • Summary tables of the processed data (per replicate and overall)
knitr::kable(reactiv_spiked_result$SummaryDF_Rep, caption="Summary statistics of fluorescence in different concentrations of test item per replicate")
Summary statistics of fluorescence in different concentrations of test item per replicate
ConcReplicateNMeanStandard deviationCoefficient of variation
0161417505.4367130.470.2589976
0251299380.0241756.840.1860555
0361699476.3382759.660.2252221
0.1818216154.0211883.730.9802445
0.1827149156.5116877.630.7835909
0.1838255036.8162183.700.6359228
0.3618149004.896508.010.6476841
0.3627230237.3105711.230.4591404
0.3637199221.1116329.380.5839210
0.7318169331.4115443.550.6817610
0.7327187208.8215340.831.1502710
0.7338292332.4139121.010.4759001
1.4518116438.8102761.270.8825347
1.4527173724.2134626.510.7749439
1.4537236771.7100056.610.4225869
2.918159732.278955.440.4942987
2.926234475.2170916.420.7289317
2.938247387.4127553.160.5156009
knitr::kable(reactiv_spiked_result$SummaryDF, caption="Summary statistics of fluorescence in different concentrations of test item of all replicates")
Summary statistics of fluorescence in different concentrations of test item of all replicates
ConcNMeanStandard deviationCoefficient of variation
0171482281.8363637.50.2453228
0.1823209287.9168250.60.8039193
0.3622190829.4106636.70.5588065
0.7323217555.3161918.40.7442633
1.4522172953.7118883.20.6873702
2.922211991.3126959.50.5988900
  • Tables of results evaluated using increasing/decreasing Williamstest and/or Dunnett’s test, if applicable.

In the Williams’ test result tables,Y.Tilde is the amalgamated meanof the fluorescence in each treatment group,Y0 is the mean of thecontrol fluorescence,DIFF is the estimated difference between thetreatment and the control,SE_DIFF is the standard error of theWilliams’ test,DF is the degrees of freedom for Williams’ test,WILLIncr orWill Decr is the Williams’ test statistic,crit Val is thecritical value of Williams distribution,Sign suggests if there issignificant difference between the treatment and the control, and%Incr is the percent increase of the fluorescence compared to thecontrol.

In the Dunnett’s test result table,Estimate is the estimateddifference between the treatment and the control,SE is the standarderror of the mixed ANOVA model,t value is the Dunnett’s teststatistic,adj p is the adjusted p value and%Incr is the percentincrease of the fluorescence compared to the control.

knitr::kable(reactiv_spiked_result$WilliamsIncrease, caption="Increasing Williams' test")
Increasing Williams’ test
ConcY.TildeY0DIFF IncrSE_DIFFDFWILL Incrcrit ValSign% Incr
Conc2.9 - Conc02.9439.6581208.915-769.256748.9462012-15.716371.933FALSE-85.69831
Conc1.45 - Conc01.45413.8901208.915-795.024648.9516912-16.241011.927FALSE-88.33193
Conc0.73 - Conc00.73413.8901208.915-795.024648.4776812-16.399811.918FALSE-85.32295
Conc0.36 - Conc00.36413.8901208.915-795.024648.9516912-16.241011.903FALSE-87.12597
Conc0.18 - Conc00.18413.8901208.915-795.024648.4776812-16.399811.873FALSE-85.88070
knitr::kable(reactiv_spiked_result$WilliamsDecrease, caption="Decreasing Williams' test")
Decreasing Williams’ test
ConcY.TildeY0DIFF DecrSE_DIFFDFWILL Decrcrit ValSign% Incr
Conc2.9 - Conc02.9411.2401208.915797.674748.946201216.296971.933TRUE-85.69831
Conc1.45 - Conc01.45411.2401208.915797.674748.951691216.295141.927TRUE-88.33193
Conc0.73 - Conc00.73424.9571208.915783.957648.477681216.171521.918TRUE-85.32295
Conc0.36 - Conc00.36424.9571208.915783.957648.951691216.014931.903TRUE-87.12597
Conc0.18 - Conc00.18424.9571208.915783.957648.477681216.171521.873TRUE-85.88070
knitr::kable(reactiv_spiked_result$Dunnetts, caption="Dunnett's test")
Dunnett’s test
EstimateSEdft valueadj p% Incr
Conc0.18 - Conc0-786.269648.4776812-16.219210-85.88070
Conc0.36 - Conc0-786.343048.9516912-16.063650-87.12597
Conc0.73 - Conc0-776.500648.4776812-16.017690-85.32295
Conc1.45 - Conc0-822.231748.9516912-16.796800-88.33193
Conc2.9 - Conc0-769.765448.9462012-15.726770-85.69831
  • Further information about the normality test (Shapiro-Wilk), thehomogeneity of variance test (Levene’s test) of residuals of themixed ANOVA model, the monotonicity test and the model fit.
reactiv_spiked_result$NormalityTest#> #>  Shapiro-Wilk normality test#> #> data:  stats::resid(mixedaov)#> W = 0.97621, p-value = 0.0227reactiv_spiked_result$LeveneTest#> # A tibble: 1 × 4#>   statistic p.value    df df.residual#>       <dbl>   <dbl> <int>       <int>#> 1     0.829   0.532     5         123reactiv_spiked_result$`Monotonicity Test`#>        Test t value Pr(>|t|) Significance#> 1    Linear   -6.34  <0.0001          ***#> 2 Quadratic    6.05  <0.0001          ***reactiv_spiked_result$MixedAnova#> Linear mixed model fit by REML ['lmerMod']#> Formula: #> sqrt(Fluor) ~ Conc + (1 | Replicate) + (1 | Replicate:Conc)#>    Data: wt_outlier#> REML criterion at convergence: 1607.975#> Random effects:#>  Groups         Name        Std.Dev.#>  Replicate:Conc (Intercept)   0.00  #>  Replicate      (Intercept)  51.74  #>  Residual                   151.56  #> Number of obs: 129, groups:  #> Replicate:Conc, 18; Replicate, 3#> Fixed Effects:#> (Intercept)       Conc.L       Conc.Q       Conc.C  #>      551.13      -471.74       437.64      -271.05  #>      Conc^4       Conc^5  #>      175.76       -30.96  #> optimizer (nloptwrap) convergence code: 0 (OK) ; 0 optimizer warnings; 1 lme4 warnings

The list output from running the data_prep() function can besummarized with the data_summary() function.

xeredar::data_summary(reactiv_spiked_result) |>  knitr::kable()
0.180.360.731.452.9
Replicate 1-84.75-89.49-88.05-91.79-88.73
Replicate 2-88.52-82.28-85.59-86.63-81.95
Replicate 3-84.99-88.28-82.8-86.07-85.44
Pooled-85.88-87.13-85.32-88.33-85.7
Dunnett*****
IncreasingWilliamsnsnsnsnsns
DecreasingWilliams*****

The shiny app

xeredar contains an integrated shiny app that is available to the usersby writingrun_app() into the console. The only requirement to use theapp is the successful installation of xeredar. When the app started, theuser has a couple of options to analyse the data. These options can beadjusted by clicking on the little gear sign next toInputs. Thefollowing options are available:

  • Use d’Agostino test?
    • The default here is that this is not selected meaning theShapiro-Wilk test is utilized to check for residual normality.However, the RADAR TG mentions the d’Agostino test which is whyit is also available to the users.
  • Apply 10% Trimming
    • The default here is that this is selected, meaning that 10%Trimming is conducted when the ANOVA assumptions are notfulfilled by the raw data. Please be aware that this does notmean that 10% Trimming is always conducted. It is onlyconducted, when the raw data is violating the residual normalityand variance homogeneity assumptions, tested with the respectivetest with an adjustable alpha level.
  • Remove outliers
    • The default here is that this is selected, meaning that outlierremoval is conducted when the ANOVA assumptions are notfulfilled by the raw data or by 10% Trimming, if it is selectedabove.
  • Try Box-Cox transformation
    • The default here is that this is selected, meaning that box-coxtransformation is carried out when the ANOVA assumptions are notfulfilled by the raw or processed data (10% Trimming or outlierremoval) nor by log- or square-root transformation. Box-Coxtransformation is not mentioned in any of the TGs which is whyit is left to the choice of the user.
  • alpha for residual normality and variance homogeneity tests
    • The default here is 0.05. In the TGs the alpha level isdiscussed so the user is adviced to inspect the requirements ofthe respective study to analyze.

The next option in the little box on the top-left of the app is to set ahook or remove the hook to decide whether the exposure well ID isregarded as random term in the underlying mixed ANOVA model. In case aREACTIV study is investigated the hook should be removed. For RADAR andXETA, the hook should be placed as long as information about theexposure well ID was documented. Of course, reducing the complexity ofthe random term might also make sense for XETA and RADAR studies in caseno variance is explained by the exposure well-ID. However, this choiceis left to the user.

When own data is supposed to be analyzed xlsx files with either spikedor unspiked data can be uploaded. Please make sure that the uploadeddata fulfills the Data requirements explained above. In case ofinsecurity, inspect the uploaded data structure of the pre-loadedexample data.

The app contains several output boxes about the required dataprocessing, a conclusion table, the uploaded data, residual diagnosticsplots, boxplots, a data summary table, the output of the residualnormality and homogeneity tests, the monotonicity test result, theDunnett’s and increasing and decreasing Williams test result tablesalong with the summary table of the underlying mixed ANOVA model.

The depicted information can be downloaded in a simple report byclicking on the button ** Word report**. It takes a couple ofseconds until the final docx file is produced and ready to download.Avoid clicking the button several times as this can lead to long waitingtimes and the production of several reports.

References

OECD. 2019a. Validation Report of the Xenopus Eleutheroembryonic ThyroidSignaling Assay (XETA) for the Detection of Thyroid Active Substances.OECD.

OECD. 2019b. TG 248: Xenopus Eleutheroembryonic Thyroid Assay (XETA).OECD.https://doi.org/10.1787/a13f80ee-en.

OECD. 2022b. Test No. 251: Rapid Androgen Disruption Activity Reporter(RADAR) Assay. OECD.https://doi.org/10.1787/da264d82-en.

OECD. 2022a. Rapid Estrogen Activity in Vivo (REACTIV) Assay (OECD DraftTG): Guideline for the Testing of Chemicals, Section 2: Effects onBiotic System. OECD.

Inka Marie Spyridonov, Lijuan Yan, Eduard Szöcs, Ana Filipa Pereira Miranda, Carsten Lange,Andrew Tindall, David Du Pasquier, Gregory Lemkine, Lennart Weltje, Maike Habekost,Pernille Thorbek. 2025. Xeredar: An open-source R-package for the statistical analysisof endocrine new approach methods (NAMs) using fish or amphibian eleutheroembryos,Environmental Toxicology and Chemistry.https://doi.org/10.1093/etojnl/vgaf056

About

Functions for automated statistical analysis of Xenopus Eleutherembryonic Thyroid Assays (XETA), Rapid Androgen Disruption Activity Reporter (RADAR) assays and Rapid Estrogen Activity In Vitro (REACTIV) assays.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp