Published on Github 2021-06-21, on CRAN.
- If
path.outis missing, R’s temporary folder will be used. - Added
regulator"HC"inmethod.B()to support Health Canada’s approach (upper cap of scaling ~57.4%). Ifalpha = 0.5only the PE has to lie within 80.0–125.0% (highly variable Cmax). However, bothoption = 1(Satterthwaite) andoption = 3(Kenward-Roger) are only approximate because Health Canada prefers a mixed-effects model. THX to Philippe Liège. - Added
swT(full replicates),swR(andswR.recif outlier(s) are detected) to the data.frame of results (previously only in the result file). Referring to the columns in examples of man-pages, vignette, andtestthat.Radapted. - In
method.A()andABE()changed the ANOVA from ‘Type I’ (default) to ‘Type III’ in order to get the correct test for carryover. Clarified in the vignette. - Direct widening to 75.00–133.33% for Cmax according to the conditions of the Gulf Cooperation Council. New argument
regulator"EMA"(default) or"GCC"inmethod.A()andmethod.B(). Hence, at least version 1.5.3 ofPowerTOSTis required.
On CRAN 2021-05-14.
path.outin examples changed from"~/"totempdir(). CRAN policy violation noted by B. Ripley.method.B.R:options(contrasts = c("contr.treatment", "contr.poly"))is the default. If a user has set other ones, restore them on exit.
Published on Github 2020-07-24, on CRAN.
- Stops now if
path.inorpath.out(ifprint=TRUE|plot.bxp=TRUE) is not given. Previously the user’s home folder"~/"was automatically used. Man-pages updated accordingly.
- Use
normalizePath()inget.data.Randinfo.env.Rfor clarity (i.e., the OS-dependent full path is given in the result-file). - Removed
graphics.off()from the beginning ofget.data.R. Caused the error incheck()where a PDF is created. - Checks whether the png-device is available on the system. If not, show a message and change to
plot.bxp = FALSE. - Cosmetic changes in vignette.
Published on Github 2020-04-08, on CRAN 2020-04-09.
- Changed expected value of
DFobtained bymethod.B(..., data = rds30, option = 1)from 17.86418 to 17.86417 and reducedtolerancein functionexpect_equivalent()oftestthatfrom 5e-7 to 1e-6. Prevents errors with r-devel on Linux and r-patched on Solaris. Required due to changed default tolerance settings in v.1.1-23 of packagelme4of 2020-04-07. Not relevant because the CI passed the test already with the more strict tolerance and in practice only four to five significant digits (not seven) are required for the CI. Furthermore, all tests passed with the current release (R3.6.3) on all operating systems.
- Cosmetic changes in vignette, installation more detailed given in
README.
Published on Github 2020-01-09, on CRAN.
- Converts
extto lower-case. Mixed-case threw an error. - Resolved issue 2 raised by MT. Results were correct but the message an annoyance. Now use
as.data.frame(read_excel(..., col_names = FALSE, .name_repair = "minimal"))inget.data(). Since the file may contain a commentary header, we needcol_names = FALSEand construct the names later (i.e., the defaultcol_names = TRUEis not possible).
- If
verbose = TRUEin all methods:print(anova(...), digits = 6, signif.stars = FALSE). - Changed names of variables in the data.frame of results. Updated man-pages.
- Unified ANOVA-table and degrees of freedom if
verbose = TRUE. Added response to verbose-output ofmethod.B(automatically inmethod.A). - Handles a case where a user exports one of the internal dataset as a CSV with row.names and quoted variables (i.e., instead of
write.csv(rds01, 'rds01.csv', quote = FALSE, row.names = FALSE) naïvely uses justwrite.csv(rds01, 'rds01.csv')).
Importing such a CSV-file was not possible so far. Resolved issue 3 raised by MT. - Adapted tests for
method.B():rds29andrds30instead ofrds18. Satterthwaite DF(..., option = 1)and Kenward-Roger(..., option = 3). - Added two small imbalanced and incomplete datasets:
rds29(TRTR|TRTR, n=12),rds30(TRR|RTR|RRT, n=14). Requested by a reviewer of the manuscript.
Published on Github 2019-11-11, on CRAN (carnival release).
- Updated CSS of vignette, fixes in
README. - Replaced TOC-links in vignette by CSS-div (fixed background image).
- Cosmetic fix. Treats the special case in verbose output of
CV.calc.Rwhen at least one studentized outlier is detected but no standarized outlier. - Badges in
README. - TOCs in
README.Rmdand vignette (THX to Yihui Xie on r-help for the latter).
Published on Github 2019-08-25, on CRAN.
- Changed default path-variables from
NULLto the user’s home folder"~/".
print(..., , digits = 7)ifverbose = TRUE. More significant digits not needed since given in the result data.frame in full precision anyway.README.Rmdknitted toREADME.md.
Published on Github 2019-07-24, on CRAN.
- Seemingly the LaTeX-Installation on CRAN is corrupt (THX to Duncan Murdoch on r-package-devel). Either the file
hyperref.styis corrupt or missing (local rendering works on Windows and Linux). Therefore, on CRAN in the PDF-manual URLs in references are converted to truncated (i.e., wrong) URLs in footnotes. Notified Uwe Ligges.
- Stopped import when no missings according to the specifier
nawhere found (THX to Igor Rubets).
README.mdincluded.NEWS.mdinstead ofNEWS.- Removed numbered references since CRAN converts URLs to footnotes in the PDF manual.
- Updated links to the EMA’s datasets in
info.data().
Published on Github 2019-07-22, on CRAN.
importFrom(pbkrtest, getKR)since error on win-builder.r-project.org
'pbkrtest package required for Kenward-Roger's method'(not locally!)- Forces
logtrans = TRUEif a user asks for an internal dataset which does not have the columnlogPK.
- Added Kenward-Roger degrees of freedom to
method.B (..., option = 3).
- Updated links to EMA’s documents (again...) in man-pages. Numbered references.
- More informative warning in
get.data()if na-specifier does not match the data in columnsPKand/orlogPK. - Depends now on R >= 3.5.0 (since .rda saved with 3.6.0).
- Kept column
logPKonly inrds01andrds02because given by the EMA. Removed inrds06,rds12,rds14,rds18,rds19,rds20,rds21(TRTR|RTRR) andrds03,rds17(TRT|RTR). Man-pages corrected. Reduces the footprint of the library by 5%. - If
path.inand/orpath.outnot given or specified folder does not exist: Changedcat()towarning(). - Cosmetic changes in verbose output of
method.A(). suppressMessages()no more needed (vignette and testthat). Issue orginating inrlangandggplot2resolved. Both packages don’t contain aNEWSfile. THX Hadley for leaving us out in the dark!stringsAsFactors = FALSEin res-list of all methods.- Removed superfluous
options(ow)after models (THX to DL). - Updated man-page of
method.A()and the vignette.
Published on Github 2019-06-14, on CRAN.
- THX to Uwe Ligges @CRAN (adding
on.exit(...)immediately after changing an option).
Published on Github 2019-06-14, on CRAN.
- As suggested by cran-submissions@r-project.org. Resubmitted to CRAN.
Published on Github 2019-06-12, submitted to CRAN (passed checks at R-release and R-devel).
- LaTeX problems for the PDF-manual partly fixed (THX to Duncan Murdoch on r-help). Final solution: Text between
\list{}{}. Note that this is discouraged acc. to the R-Extension Manual 2.1.1! - Updated WHO-reference in man-pages.
- Added vignette.
- Added
\testsfortestthat().
- Simplified and reordered sources of man-pages.
- Changed
{\eqn{foo\textsubscript}{bar}}to the simple{\eqn{foo_{bar}}in two man pages. StartupWarningsseemingly unavoidable untilrlangwill be corrected.- Small correction in text of box plot of
CV.calc(). Studentized/standardized does not exactly agree with SAS (usestype = 2by default).
Published on GitHub 2019-05-30.
- Renaming S3 method doesn’t help.
- Updated links in man-pages to reflect changes in the FDA’s and the EMA’s sites.
- Updated links to reference data in
info.data(). - Updated links in CSV-files.
- Import from XLS with a header.
get.data()CSV-file: Issue with characters in the header which were== sepresolved. [MT]get.data()Sub/seq in data.frame was empty for complete sequences.info.env()returnedpath.outaspath.in.- Mixed model was given in the result file of
method.A(). - Adapt the number of subjects/sequence and number of missings/sequence to the reordered sequences in
get.data(). Calculation was correct but output in result-files wrong. nTTwasNAinget.data()for TRTR|RTRT. Now design (full/replicate) is obtained frominfo.design().- In
CV.calc(..., ole = TRUE)if an outlier is detected not in both methods (studentized, standardized). method.B(option = 1)output to file.- In package
PowerTOSTT is always first. The order is only relevant inmethod.A(..., adjust = TRUE)and an unbalanced RTR|TRT-design. In this case the order of subjects/sequence is reversed by callingscABEL(..., n = rev(ret$Sub.Seq)). THX to DL for discovering this bug.
- Renamed S3 methods (prefixed with
repBE) acc. to rlang issue 669 (THX to MT). - A warning in
CHECKdissappeared in R 3.6.0. Throws other ones in examples which change the working directory. Wrapped all examples in man-pages in\dontrun{}. - Rewrite of reading from file. [MT]
- The header is automatically identified (removed as an argument from the calling functions).
- The first column must no be more
subject(any order is acceptable). Now the word ‘subject’ is allowed in the header.
- Argument
setcan be an empty string""to support reading from CSV- files. Only required for XLS (the name of the sheet) now. - Argument
fencefor box plots instead of the hard-coded 3 as a multiplier of IQR. The default 1.5 in most (all?) software packages detects a lot of outliers. 3 seems to be too liberal. The new default 2 is a compromise. - Changed TRTR|TRRT|RTTR|RTRT to TRTR|RTRT|TRRT|RTTR. More logical (stacking sequences of the other full replicates). Adapted scripts and man pages accordingly.
- Changed the lexical order of sequences (T before R) in conformity with package
PowerTOSTand the EMA’s Q&A dataset II. - Resolved issue 1: Introduced aliases in man pages for all data sets. Otherwise, warnings in
CHECKabout undocumented objects. - Identify internal data sets based on their attribute. Uses now
info.data()(THX to DL). Functionwhich.data()removed. - Man pages reworked. [DL]
method.A(adjust = TRUE)assesses additionally the empiric type I error based on the recalculatedCVwR(if applicable).- Changed TRR.RTT to RTT.TRR for consistency (R always first).
- Added dataset 27 for Balaam’s design (TR|RT|TT|RR) and dataset 28 (TTRR|RRTT); both simulated with homoscedasticy. The former only for completeness (poor power). The latter might be useful for steady state studies. Man-pages for both.
- Balaam’s design implemented.
- Compare variabilites according to the FDA’s warfarin guidance, i.e., assess whether the upper confidence limit of σwT/σwR ≤2.5.
- Shows a ‘graphical’ presentation of the CI, PE, and BE-limits in the result file.
- Added datasets:
- 26 (TRTR|RTRT). One of the few where we have results for comparison (regrettably only three significant digits).
- 25 (TRTR|RTRT) simulated with heteroscedasticy.
- 24 (TRRT|RTTR|TTRR|RRTT) from the FDA. Subject 16 completely missing. Adapted
get.data()for such a case. - 23 as an example of a 4-period 4-sequence design (though not recommended by the FDA).
- 22 for the extra-reference design (RTR|TRR).
- Calculate swT/swR (might be useful for the WHO’s scaling of AUC).
ABE()has new argumentstheta1andtheta2(defaults0.80and1.25). Useful for NTIDs (EMA) or wider limits of Cmax (GCC).- New function
info.design(). Sorts sequences according to the preferred order (T first) and throws a message if the design is untested. - Changed the names of result files reflecting the Method used rather the internals (
lme/lmer). Lazy data: trueinDESCRIPTIONallows direct access of objects withindata().
Released to collaborators 2017-06-24.
- CSV-files: Characters in the header which are equal to
separe lost. method.B(option = 1)can’t print to file with internal data.
- Unified data sets, updated man-pages, and changed
which.data():reftords. Warnings inCHECK:'rdsXX' not found.
Released to collaborators 2017-06-23.
- If a user calls
foo(path.in = path.in, ...)but the variablepath.inis not defined before. Throwsobject 'path.in' not found in CV.calc().
- If
'descr'was read from an external file and the code stopped for data not matching the id inwhich.data(). - Warning in man-pages: Header must not contain the word
'subject'. - If the specified file is not found in
path.inthe file browser opens on Windows (other operating systems?). - If
verbose=TRUEthe anova was not shown inABE().
- New function
which.data(): returns data.frame'id'of checksum (MD5), file "DS", set ("01", ... "XX"), ref ("refXX"), descr. Used inget.data()to obtain required variables of the currently attached internal data set based on its MD5-checksum. - Changed the default variable separator from
";"to","(more common). Suggested by DL.
- Removed
CV.calcfromNAMESPACE. Man-page not needed any more. THX to DL! - Replaced
subset()inget.data()andCV.calc()by direct assignment. No need for the hacks any more. - Removed DS.xls and adapted man-examples accordingly. CRAN policy: Data sets should not be larger than 1 MB. BTW, why is the zip so much larger than the tarball? Before removing DS.xls their sizes were similar.
- F.i.
data(ref02)followed byprint(ABE(details = TRUE, print = FALSE, data = data))works. Problems: The descriptive header (variabledescr) doesn’t exist in the internal data set as well as its name. Hence, the same with the defaultprint = TRUEin all functions gives an error. Stupid: The data set must be chosen outside of the function call.foo(data = data(ref02))gives an error. - Added argument
data = NULL(defaultNULL) to top-level functions. method.B(): Changedprint(anova.lm(modB))toprint(anova(modB)). [DL]- Modified imports in
NAMESPACE. [DL] - Working on
\dataand the documentation. All data sets observe the patternrefXX.rdain order to come last in the man-page.
Released to collaborators and beta-testers 2016-06-19.
- Renamed package from
ABELtoreplicateBEsince ABE is now supported as well. - Added function
ABE()for conventional (unscaled) ABE.
- Added
\data\ref01.rda(already factorized data.frame) and man-page. - Changed
enf.info(): If path(s)NULL, show the user’s home folder in the linesInput fromandOutput to.
Released to collaborators and beta-tester Mahmoud Teaima 2016-06-19.
- New argument
plot.bxp. IfFALSE(default) the boxplot will be shown in the default graphics device. IfTRUEthe boxplot will be saved in PNG format (720×720 px) topath.out. Argumentaskis also observed. - If
path.inand/orpath.outnot given or not existing, the user’s home folder will be used. Updated the man pages accordingly.
Released to collaborators and beta-tester Mahmoud Teaima 2016-06-18.
- Argument
ask(defaultFALSE). IfTRUEand a result file already exists, the user is asked whether it should be overwritten. - Removed
lme4from listed packages inenv.inf().lmer,summary, andanovaobtained fromlmerTest. - Changed in
get.data()name of file from"_results_"to"_ABEL_". - Changed
get.data():path.outonly required ifprint = TRUE. Defaultpath.outinmethod.A()andmethod.B()set toNULL. - Improved man-pages. Added an example comparing Method B with Method A.
Released to collaborators and beta-tester Mahmoud Teaima 2016-06-16.
- First version of package built.
- Simplified output in
method.A()ifadjust = TRUE. - Housekeeping routine removed.
- The former variable
path(used for in- and output) substituted by variablespath.inandpath.out. - Functions
env.info(),get.data(),CV.calc(),method.A(),method.B()stand-alone in order to support package-building. method.A(): Changed
lm(foo ~ subject + period + treatment, data)
to the subject decomposition acc. to the Q&A document
lm(foo ~ sequence + subject%in%sequence + period + treatment, data)
Note: PE, MSE, DF are identical to the simple model, but less confusing if the ANOVA is shown (verbose = TRUE). [suggested by Mahmoud Teaima]
Released to collaborators 2016-06-11.
- print corrected. Line-endings CRLF (Windows), LF (UNIXes), CR (MacOS). Tested on Windows [HS] and on macOS Sierra 10.12.5 (THX to Mahmoud).
- Reading xls(x)-files corrected. Converts the tibble-object to a data.frame.
- List in
env.inf()only the packages which are used by the respective functions. - y-axis in boxplot symmetrical around zero. I think that this is more informative than the default.
- Vector of na-strings supported since v1.0.0 of package
readxl. Throws a message if the installed version is <1.0.0. Is there a method to automatically update a package?
Released to collaborators and beta-tester Mahmoud Teaima 2016-06-01.
- Outlier analysis to console if
verbose = TRUE. - Moved
DFandalphaup after the number of subjects. More logical to me. - If outlier(s) detected,
CVwRis recalculated and BE is additionally assessed based on the new limits. - Added optional outlier assessment (
ola = TRUE) for the reference. Defaults toFALSE. Studentized and standardized residuals are calculated and shown in box plots. Note: Only standardized (a.k.a internally studentized) residual are available in Phoenix WinNonlin.
Released to collaborators and beta-tester Mahmoud Teaima 2016-12-16.
- Variable and decimal separators for reading CSV-files can be specified. Defaults
";"and"." - Result-file UTF-8 encoded (important for OSX; THX to Mahmoud).
- Added license info and disclaimer (paranoia).
- Added a statement if
nTR <12. Suggested by MT. - Added a statement about ‘uncertain’ CV~wR if
nRR <12in one of the full replicate 3-period designs (acc. to the EMA’s Q&A Rev. 12). - Added argument
verbose(defaultFALSE) tomethod.A()/method.B()to support detailed information without debugging. - Moved check for trailing
'/'in the path-argument frommethod.A()/method.B()toget.data(). - Restored the evaluation by
lmer/lmerTestfrom v0.83 to support comparing the performance of packages. Wish of DL.
Released to collaborators and beta-tester Mahmoud Teaima (Faculty of Pharmacy, Cairo University) 2016-12-14.
- Wrong
Miss.perfor data sets withNA = '.'fixed. [MT]
- If
pathdoes not exist, R’s working directory is used with a warning. [MT]
Released to collaborators 2016-12-14.
- The line
names(Miss.per)is removed (not used in output). [MT] - Vectorized
Miss.seqandMiss.peringet.data(), unnecessary functioncomplete()removed. [MT]
Released to collaborators 2016-12-14.
- Removed
lmer/lmerTest(was called byoption = 1in previous versions), since Satterthwaite’s DF are not compliant with the EMA’s Q&A document (the SAS-code uses implicitelyDDFM = CONTAIN). - Added
DFof the treatment difference to the output.
Released to collaborators 2016-12-11.
- Added function
complete()to construct a data.frame of complete data based on the subjects and design. Called byget.data()to calculate the number of missing values independent whether the DS contains this information (NAinPK) or not. Not vectorized yet. - New variable
Miss.seq: Missings / sequence. - New variable
Miss.per: Missings / period.
Released to collaborators 2016-12-10.
- Added
na.action = na.omittolme()since its default (na.fail) stopped the model.
- Changed the default in
method.B()fromoption = 1tooption = 2. No DDFM applied.lme4/lmerTest(option = 1) - like Phoenix WinNonlin by default - uses Satterthwaite’s DF. - Input checking:
- Converts variable names (except
PKandlogPK) to lower case. Stops if variables are not coded assubject,period,sequence, andtreatment. - Stops if treatments are not coded as
RandT. - Stops if the number of sequences and/or periods does not match the specified design.
- Converts variable names (except
- Returns number of missings / sequence (currently only for NAs).
Released to collaborators 2016-12-09.
- Checking packages fixed. [MT]
(.)removed before names of variables. [MT]
Released to collaborators 2016-12-09.
- Calculation of
Nsub.seqfixed. [MT]
/is added to the path if not present. [MT]- The name of used package is added to the file name for
method.B()(_lmeror_lme). [MT] lme4is added to the list of packages (it was an implied subroutine call fromlmerTest). [MT]
Released to collaborators and beta-tester Jiři Hofmann 2016-12-07.
- Calculation of
Nsub.seqin DA12 (with N=77) falsely gave 149 in both sequences. - BE-assessment corrected (testing both
res$CIandres$GMRinstead ofunique().
Released to collaborators 2016-12-02.
sequence+subject%in%sequence+period accordingto the EMA’s Q&A (setup in SAS) and the templates of Phoenix WinNonlin. Note that for unique coding of subjects the nested structure is superfluous / the model overspecified . The more simple modelsubject+periodgives exactly the same residual error.
Released to collaborators 2016-11-28.
- Added import format xls(x). Requires package
readxl. Cave: If the sheet(s) contains a commentary header, in the argumentskipthe number of rows not to be used must be given.
Released to collaborators 2016-11-27.
- New function
CV.calc()(suggested by DL). Moved the calculations fromget.data(). Adapted calls inmethod.A()andmethod.B().
- Vectorized
Nsub.seq[MT].
Released to collaborators 2016-11-26.
- Bug corrected in selecting subjects with RR [MT].
- Added number of subjects/sequence and check for balance (not vectorized yet).
- Results of iteratively adjusted alpha printed. Throws a warning if
adjust = TRUEfor an unsupported design.
Released to collaborators 2016-11-24.
- Use package
PowerTOSTfor assessment of the empiric type I error and (optionally) iteratively adjustment of α (onlyMethod A). New argumentadjust(defaultFALSE). Results only to the console. Changed hard-coded parts to the respective functions ofPowerTOST. - New argument
logtrans(defaultTRUE). IfTRUE, the raw data (columnPK) are internally log-transformed. IfFALSEthe already log-transformed data (columnlogPK) are used.
- Data can now be provided without the column
logPK. If erroneously a call is made withlogtrans = FALSE(and the columnlogPKis missing), the code switches to internal log-transformation (as iflogtrans = TRUEwould have been called) and throws a warning. - Added log half-width to the data.frame
res.
Released to collaborators 2016-11-23.
method.B()has a new argumentoption:1(default) evaluates bylmerTest()and2bynlme().- New arguments
print(defaultTRUE) anddetails(defaultFALSE).
foo(..., print = FALSE, details = TRUE)returns a data.frame of results in full precision. - Using
intervals()instead of a hard-coded confidence interval [DL]. - Added coding for Method B by
nlme. [MT] - Unless stated otherwise all changes by [HS].
Released to collaborators 2016-11-22.
- New [HS].