Statistical Software
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Write
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
      • Invitee
    • Publish Note

      Publish Note

      Everyone on the web can find and read all notes of this public team.
      Once published, notes can be searched and viewed by anyone online.
      See published notes
      Please check the box to agree to the Community Guidelines.
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Sharing URL Help
Menu
Options
Versions and GitHub Sync Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Write
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
Invitee
Publish Note

Publish Note

Everyone on the web can find and read all notes of this public team.
Once published, notes can be searched and viewed by anyone online.
See published notes
Please check the box to agree to the Community Guidelines.
Engagement control
Commenting
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
  • Everyone
Suggest edit
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
Emoji Reply
Enable
Import from Dropbox Google Drive Gist Clipboard
   owned this note    owned this note      
Published Linked with GitHub
1
Subscribed
  • Any changes
    Be notified of any changes
  • Mention me
    Be notified of mention me
  • Unsubscribe
Subscribe
--- title: bayesian-demos tags: statistical-software-demos, statistical-software robots: noindex, nofollow --- Bayesian and Monte Carlo Software - Demonstration Application of Standards ========================================================================== This file demonstrates the application of [rOpenSci](https://ropensci.org) ’s [standards for statistical software](https://ropenscilabs.github.io/statistical-software-review-book/standards.html) to two [Bayesian software](https://ropenscilabs.github.io/statistical-software-review-book/standards.html#bayesian-and-monte-carlo-software) packages. These applications are not intended to represent or reflect evaluations or assessment of the packages, and particularly not of the extent to which they fail to meet standards. Rather, the demonstrations are intended to highlight aspects of the software which could be productively improved by adhering to the standards, and thereby more generally to demonstrate the general usefulness of these standards in advancing and improving software quality. [`fmcmc`](https://github.com/USCbiostats/fmcmc) ----------------------------------------------- ### 1 [General Standards](https://ropenscilabs.github.io/statistical-software-review-book/standards.html#general-standards-for-statistical-software) #### 1.1 Documentation - [x] **G1.0** The primary reference is to a JOSS article, with sufficient secondary references documented throughout. **Statistical Terminology** - [ ] **G1.1** Statistical terminology is generally used without sufficient clarification or definition. **Function-level Documentation** - [x] **G1.2** *Software should use [`roxygen`](https://roxygen2.r-lib.org/) to documentation all functions.* - [x] **G1.2a** internal functions are documented in standard [`roxygen`](https://roxygen2.r-lib.org/) format **Supplementary Documentation** - [ ] **G1.3** No code included to reproduce results which form the basis of performance claims made in associated publications. - [ ] **G1.4** No code included to compare performance claims with alternative implementations in other R packages. #### 1.2 Input Structures **Uni-variate (Vector) Input** - [x] **G2.0** Lengths of inputs generally asserted, and explicit secondary documentation of expected lengths provided. - [x] **G2.1** Types of inputs generally asserted, and explicit secondary documentation of expected types provided. - [ ] **G2.2** Submission of multivariate input to parameters expected to be univariate is possible, and not caught in pre-processing - [x] **G2.3** No functions have single-valued character inputs, so not applicable. - [ ] **G2.4** Provide appropriate mechanisms to convert between different *data types*, potentially including: - [ ] **G2.4a** There is no explicit conversion to `integer` via `as.integer()` - [x] **G2.4b** explicit conversion to continuous uses `as.numeric()` - [x] **G2.4c** explicit conversion to character uses `as.character()` - [x] **G2.4d**–i**G2.4e** No `factor` data used, so not applicable - [x] **G2.5** No `factor` data used, so not applicable **Tabular Input** - [x] **G2.6**–**G2.9** Pre-processing of rectangular input expected to be explicitly controlled through user specification of a log-likelihood function, so not applicable. **Missing or Undefined Values** - [ ] **G2.10** There are no checks for missing data - [ ] **G2.11** There are no options for users to specify how to handle missing (`NA`) data - [ ] **G2.12** Functions assume non-missingness, without explicitly stating such - [ ] **G2.13** There is no processing of other (non-`NA`) undefined values. #### 1.3 Output Structures - [x] **G4.0** Nothing is written to local files, so not applicable #### 1.4 Testing **Test Data Sets** - [x] **G5.0** No standard data sets used in tests (rather, all tests use random data simulated with fixed random seeds) - [x] **G5.1** Data sets are created within software, but not in a way that is appropriate for export, so not applicable. **Responses to Unexpected Input** - [ ] **G5.2** Tests do not cover all error and warning conditions - [x] **G5.2a** Every message produced `stop()`, `warning()`, `message()`, or equivalent is unique - [ ] **G5.2b** Tests do not cover every one of those messages - [ ] **G5.3** Absence of missing or undefined values in return objects not explicitly tested. **Algorithm Tests** - [x] **G5.4** Correctness tests are appropriately implemented - [x] **G5.5** Correctness tests are run with a fixed random seed - [x] **G5.6** Parameter recovery tests appropriately implemented. - [x] **G5.7** Algorithm performance tests appropriately implemented. - [x] **G5.8** Edge condition tests appropriately implemented. - [ ] **G5.9** No noise susceptibility tests implemented. **Extended tests** - [x] **G5.10**–**G5.12** No extended tests included, so not applicable ------------------------------------------------------------------------ ### 2 [Bayesian Standards](https://ropenscilabs.github.io/statistical-software-review-book/standards.html#bayesian-and-monte-carlo-software) #### 2.1 Documentation of Inputs - [ ] **BS1.0** Uses the term “parameter” to refer to “hyperparameters”, although does so entirely consistently - [x] **BS1.1** Extensive descriptions of how to enter data, primarily via vignettes. - [ ] **BS1.2** Descriptions of how to specify prior distributions provided - [ ] **BS1.2a** Not in `README` - [x] **BS1.2b** In vignette - [ ] **BS1.2c** Not in Function-level documentation - [x] **BS1.3** All parameters which control the computational process extensively described. - [x] **BS1.3a** Documents how to use the output of previous simulations as starting points of subsequent simulations. - [x] **BS1.3b** Does not document how to use different sampling algorithms because only implements one. - [x] **BS1.4** Explicitly describes and provides examples of convergence checkers. - [x] **BS1.5** Differences between convergence checkers are explicitly tested. #### 2.2 Input Data Structures and Validation **Input Data** - [x] **BS2.0** Vector inputs are appropriately pre-processed regardless of class structures. - [ ] **BS2.1** Some pre-processing routines are implemented for alternative columns - [x] **BS2.1a** Re-classed columns are processed via `as.data.frame` - [ ] **BS2.1b** List columns fail - [ ] **BS2.2** No *pre-checks* are implemented to ensure input data are commensurate, rather unhelpful errors are issued instead. **Prior Distributions, Model Specifications, and Hyperparameters** - [ ] **BS2.3** Hyperparameters are neither validated nor pre-processed prior to submitting to analytic routines, with errors passed through to multiple parallel computational chains (`burnin`, for example, is only used *after* chains have been calculated, to determine which parts of result are to be discarded). - [ ] **BS2.4** Lengths of hyperparameter vectors are not explicitly checked, rather passed through to attempted matrix multiplication, and then issuing unhelpful error message (“Error in coeffs \* x. : non-conformable arrays”). - [x] **BS2.5** Passing to “coeffs \* x.” described above ensures that lengths of hyperparameter vectors are commensurate with expected model input - [ ] **BS2.6** There are no pre-processing checks to validate appropriateness of numeric values submitted for hyperparameters; for example, hyperparameters defining second-order moments and given negative values are passed through, and lead to unhelpful errors (“Error in if (R\[i\] &lt; klogratio) { : missing value where TRUE/FALSE needed”). **Computational Parameters** - [ ] **BS2.7** There are no checks that values for parameters are positive (see BS2.3 above; negative `burnin` values still lead to chains being calculated). - [ ] **BS2.8** There are no check on lengths of inputs, for example, passing a length = 2 vector to `burnin` generates warnings on various conditional checks expecting single values. - [ ] **BS2.9** There are no checks that arguments are of expected classes or types, rather passing unexpected classes or types generally fails at some stage with uninformative error messages. - [ ] **BS2.10** Parameters of inappropriate type are not automatically rejected, rather usually fail as described above (BS2.9). **Seed Parameters** - [ ] **BS2.11** Seeds are not able to be passed as a parameter, rather random generation is determined by the system `seed` value. - [x] **BS2.12** Results of previous runs can be used as starting points - [x] **BS2.13** Each chain is started with a different seed by default - [ ] **BS2.14** Seeds can not be passed, so no diagnostic messages can be issued when identical seeds are passed to distinct computational chains - [ ] **BS2.15** There is no advice *not* to use `set.seed()`, rather it is the suggested way to control random generation. - [x] **BS2.16** The relevant parameter is called “initial”, which require no pluralization. **Output Verbosity** - [ ] **BS2.17** There is no parameter controlling the verbosity of output, rather just a single `progress` parameter to switch the progress bar on and off, while convergence checkers have no verbosity control at all. - [x] **BS2.18** It is possible to suppress progress indicators while retaining verbosity of warnings and errors, through the `progress` parameter described above (**BS2.17**). - [ ] **BS2.19** It is not possible to suppress warnings, and many uninformative warnings may be triggered as described above. - [ ] **BS2.20** There is no explicit way to catch errors #### 2.3 Pre-processing and Data Transformation **Missing Values** - [ ] **BS3.0** No missing values are permitted, and no checks are performed, rather missing values are passed through unchecked, leading to unhelpful error messages. - [ ] **BS3.1** There are no routines to pre-process missing values prior to passing data through to main computational algorithms. **Perfect Collinearity** - [ ] **BS3.2** There are no pre-processing routines to diagnose perfect collinearity, and there are no diagnostic messages or warnings - [ ] **BS3.3** There are no distinct routines for processing perfectly collinear data. #### 2.4 Analytic Algorithms - [x] **BS4.0** Sampling algorithms are documented, including literary citation - [ ] **BS4.1** There are no comparisons with external samplers - [ ] **BS4.2** There are no methods to validate posterior estimates (other than convergence checkers used during simulation chains). - [x] **BS4.3** Several different kinds of convergence checkers are implemented and documented. - [x] **BS4.4** Computations are able to be stopped on convergence - [x] **BS4.5** Appropriate mechanisms are provided for models which do not converge, by stopping after specified numbers of iterations regardless of convergence. - [ ] **BS4.6** There are no tests to confirm that results with convergence checker are statistically equivalent to results from equivalent fixed number of samples without convergence checking. - [ ] **BS4.7** Effects of parameters of convergence checkers are not tested. #### 2.5 Return Values - [ ] **BS5.0** Return objects do not include information on seed(s) or starting value(s) - [ ] **BS5.1** Return objects do not include metadata on types (or classes) and dimensions of input data - [ ] **BS5.2** Software returns neither their input function of distributional parameters, nor enables subsequent access to such. - [ ] **BS5.3** Return object does not include convergence statistics - [ ] **BS5.4** Return object does not include details of convergence checker used - [ ] **BS5.5** Return object does not include diagnostic statistics to indicate absence of convergence #### 2.6 Additional Functionality - [ ] **BS6.0** Return object does not Implement a default `print` method - [x] **BS6.1** Return object does Implement a default `plot` method - [ ] **BS6.2** Software provides and documents abilities to plot sequences of posterior samples, although burn-in periods are simply excluded from plots. - [x] **BS6.3** There are straightforward abilities to plot posterior distributional estimates - [x] **BS6.4** Provide `summary` methods for return objects are provided - [x] **BS6.5** It is possible to plot both sequences of posterior samples and distributional estimates together in single graphic #### 2.7 Tests **Parameter Recovery Tests** - [x] **BS7.0** Tests for recovery of parametric estimates of a prior distribution - [x] **BS7.1** Tests for recovery of prior distribution in the absence of additional data - [x] **BS7.2** Tests for recovery of expected posterior distribution given a specified prior and input data **Algorithmic Scaling Tests** - [ ] **BS7.3** There are no tests for scaling of algorithmic efficiency with sizes of input data **Scaling of Input to Output Data** - [x] **BS7.4** Tests confirm that predicted or fitted values are on (approximately) the same scale as input values. ------------------------------------------------------------------------ [`rstan`](https://github.com/stan-dev/rstan) -------------------------------------------- ### 3 [General Standards](https://ropenscilabs.github.io/statistical-software-review-book/standards.html#general-standards-for-statistical-software) #### 3.1 Documentation - [x] **G1.0** Primary reference is provided. **Statistical Terminology** - [x] **G1.1** Statistical terminology clarified and unambiguously defined. **Function-level Documentation** - [ ] **G1.2** [`roxygen`](https://roxygen2.r-lib.org/) not used to documentation functions. - [ ] **G1.2a** Internal functions generally not documented in any form **Supplementary Documentation** - [x] **G1.3** Code is provided to reproduce results which form the basis of performance claims made in associated publications (for example, for `sbc()`). - [ ] **G1.4** Code is provided to compare performance claims with alternative implementations in other R packages (for example, for `sbc()`). #### 3.2 Input Structures **Uni-variate (Vector) Input** - [ ] **G2.0** There is no explicit documentation of expected lengths of inputs - [ ] **G2.1** There is no explicit documentation of expected *data types* of vector inputs - [ ] **G2.2** There is no explicit prohibition or restriction on submission of multivariate input to parameters expected to be univariate. - [ ] **G2.3** Some control of single-valued character input provides - [x] **G2.3a** `match.arg` is used - [ ] **G2.3b** `tolower` is not used, nor is their explicit mention of strict case sensitivity - [x] **G2.4** Provide appropriate mechanisms to convert between different *data types*, potentially including: - [x] **G2.4a** explicit conversion to `integer` via `as.integer()` - [x] **G2.4b** explicit conversion to continuous via `as.numeric()` - [x] **G2.4c** explicit conversion to character via `as.character()` (and not `paste` or `paste0`) - [x] **G2.4d**–**G2.4e** There is no explicit `factor` input, so not applicable - [x] **G2.5** There is no explicit `factor` input, so not applicable **Tabular Input** - [x] **G2.6** Restrictions on tabular input very carefully documented - [x] **G2.7** There are conversion routines for multivariate input, for reasons explained in documentation. - [x] **G2.8** There is no type conversion in which information is lost, so not applicable. - [x] **G2.9** Restrictions on tabular input very carefully documented. **Missing or Undefined Values** - [x] **G2.10**–**2.13** Missing data is explicitly prohibited, as extensively documented, and all appropriate checks are also implemented. #### 3.3 Output Structures - [ ] **G4.0** Processing of names of local files explicitly documented #### 3.4 Testing **Test Data Sets** - [x] **G5.0** Tests use standard data sets - [x] **G5.1** Data sets created to test package are not exported, but are made generally available through direct inclusion within package sub-directory. **Responses to Unexpected Input** - [ ] G4.2 Tests do not cover all error and warning conditions - [ ] G4.3 Absence of missing or undefined values in return objects not explicitly tested. **Algorithm Tests** - [x] **G5.3** Correctness tests appropriately implemented. - [x] **G5.5** Correctness tests are run with a fixed random seed - [x] **G5.6** Parameter recovery tests appropriately implemented. - [x] **G5.7** Algorithm performance tests appropriately implemented. - [x] **G5.8** Edge condition tests appropriately implemented. - [ ] **G5.9** No noise susceptibility tests implemented **Extended tests** - [x] G4.10 Extended tests appropriately implemented (notably for underlying C++ code). - [x] G4.11 Extended tests require no large data sets, so not applicable - [ ] G4.12 Conditions necessary to run extended tests not appropriately documented ------------------------------------------------------------------------ ### 4 [Bayesian Standards](https://ropenscilabs.github.io/statistical-software-review-book/standards.html#bayesian-and-monte-carlo-software) #### 4.1 Documentation of Inputs - [ ] **BS1.0** There terms “parameter” and “hyperparameter” are used interchangeably and ambiguously in much documentation (for example, in [*Prior Choice Recommendations*](https://github.com/stan-dev/stan/wiki/Prior-Choice-Recommendations)). - [x] **BS1.1** There is extensive description of how to enter data - [x] **BS1.2** There is extensive Description of how to specify prior distributions - [ ] **BS1.2a** Not in the main package `README`, although that seems okay here, as the stan project is too big for that to serve a simple demonstration purpose. - [x] **BS1.2b** In at least one package vignette - [x] **BS1.2c** In function-level documentation, preferably with code included in examples - [x] **BS1.3** All parameters which control the computational process are extensively described - [x] **BS1.3a** There is sufficient documentation of how to use the output of previous simulations as starting points of subsequent simulations. - [x] **BS1.3b** There is sufficient documentation of how to use different sampling algorithms. - [x] **BS1.4** `rstan` does not directly implement convergence checkers, rather provides convergence statistics throughout, and exports several well-documented helper functions to aid subsequent analyses of such. - [x] **BS1.5** The documentation for the [`optimizing()` function](https://mc-stan.org/rstan/reference/stanmodel-method-optimizing.html) describes several ways of controlling convergence to point estimates. #### 4.2 Input Data Structures and Validation **Input Data** - [ ] **BS2.0** one-dimensional input is not appropriately pre-processed, with submission of `units` vectors erroring (“both operands of the expression should be ‘units’ objects”). - [x] **BS2.1** `rstan` does not convert all plausible forms of two-dimension input to standard forms, but does document very explicitly the expected forms for such, and strongly discourages submitting non-standard formats or classes. - [x] **BS2.1a** `data.frame` or equivalent objects which have columns with non-standard class attributes are simply coerced to numeric, as clearly documented. - [x] **BS2.1b** Submitting list columns is explicitly and strongly discouraged in the [documentation](https://mc-stan.org/rstan/reference/stan.html#passing-data-to-stan), although possible as described there. - [x] **BS2.2** Pre-processing routines ensure all input data is dimensionally commensurate **Prior Distributions, Model Specifications, and Hyperparameters** - [x] **BS2.3** Validation and pre-processing of hyperparameters is expected to be part of user-provide model specifications, as clearly documented. - [x] **BS2.4**–**BS2.6** Hyperparameter vectors are not submitted to `rstan` like most other Bayesian software, and so these standards do not apply. **Computational Parameters** - [ ] **BS2.7** There are some checks that values for parameters are positive where expected, but these are only implemented within each chain, not as single pre-processing step. - [x] **BS2.8** Lengths of inputs are checked and error appropriately - [x] **BS2.9** Arguments of unexpected classes or types are appropriately pre-converted - [ ] **BS2.10** Parameters of inappropriate type are not automatically rejected; rather are submitted to sub-routines, triggering unhelpful errors. **Seed Parameters** - [x] **BS2.11** Seeds can be passed as a parameter - [x] **BS2.12** Results of previous runs can be used as starting points for subsequent runs - [x] **BS2.13** Each chain is always started with a different seed by default - [x] **BS2.14** It is not possible to pass identical seeds to distinct computational chains, so standard not applicable - [x] **BS2.15** Advice *not* to use `set.seed()` is explicitly documented (and has no effect). - [x] **BS2.16** The parameter controlling starting values is called `init`, so appropriately not pluralised. **Output Verbosity** - [x] **BS2.17** There are multiple ways of controlling the verbosity of output - [x] **BS2.18** It is possible to suppress messages and progress indicators, while retaining verbosity of warnings and errors. - [x] **BS2.19** It is possible to suppress warnings - [ ] **BS2.20** No errors are able to be either caught or converted to warnings #### 4.3 Pre-processing and Data Transformation **Missing Values** - [x] **BS3.0** Documentation and error message explicitly state that no missing values are permitted - [x] **BS3.1** No missing values are permitted, no pre-processing standards not applicable **Perfect Collinearity** - [ ] **BS3.2** There are no pre-processing routines to diagnose perfect collinearity, no are diagnostic messages or warnings issued - [ ] **BS3.3** There are no distinct routines for processing perfectly collinear data, rather all data are passed directly to sampling algorithms #### 4.4 Analytic Algorithms - [x] **BS4.0** Sampling algorithms are explicitly documented and referenced. - [ ] **BS4.1** There are no explicit comparisons with external samplers - [x] **BS4.2** A method to validate posterior estimates is implemented (via the [`sbc()` function](https://mc-stan.org/rstan/reference/sbc.html)). - [x] **BS4.3** No convergence checker as such implemented, but extensive convergence statistics are provided, documented, and able to be extracted. - [x] **BS4.4** Computations are able to be stopped on convergence (via appropriate post-processing functions such as [`optimizing()`](https://mc-stan.org/rstan/reference/stanmodel-method-optimizing.html)). - [x] **BS4.5** Appropriate mechanisms are provided for models which do not converge. - [ ] **BS4.6** Convergence statistics are not explicitly tested within the R package (even though the more general `stan` code is checked very comprehensively). - [ ] **BS4.7** Effects of parameters passed to convergence checkers are not tested. #### 4.5 Return Values - [x] **BS5.0** Return objects include both seeds and starting values (able to be extracted via `get_seed()` and `get_inits()` functions). - [ ] **BS5.1** Return objects DO NOT include appropriate metadata on types or dimensions of input data - [x] **BS5.2** `rstan` enables direct access to prior specification through the `get_stancode()` and `get_stanmod()` functions. - [x] **BS5.3** Convergence statistics or equivalent are returned or able to be extracted. - [x] **BS5.4** Where multiple checkers are enabled, return details of convergence checker used - [x] **BS5.5** Appropriate diagnostic statistics are returned (or able to be accessed) to indicate absence of convergence #### 4.6 Additional Functionality - [x] **BS6.0** Default `print` method for return objects is implemented - [x] **BS6.1** Default `plot` method for return objects is implemented - [x] **BS6.2** Sequences of posterior samples are able to be plotted, although burn-in periods are omitted from plot - [x] **BS6.3** Posterior distributional estimates able to be directed plotted - [x] **BS6.4** `summary` methods are provided for return objects - [ ] **BS6.5** It is not possible to plot both sequences of posterior samples and distributional estimates together in single graphic #### 4.7 Tests **Parameter Recovery Tests** - [x] **BS7.0** There are tests for recovery of parametric estimates of prior distribution - [x] **BS7.1** There are tests for recovery of prior distribution in the absence of additional data - [x] **BS7.2** There are tests for recovery of posterior distribution given specified prior and input data **Algorithmic Scaling Tests** - [ ] **BS7.3** There are no tests for scaling of algorithmic efficiency with sizes of input data **Scaling of Input to Output Data** - [x] **BS7.4** There are tests that predicted or fitted values are on the same scale as input values. <!-- ## [`mgcv`](https://cran.r-project.org/web/packages/mgcv/index.html) ## [`rjags`](https://cran.r-project.org/web/packages/rjags/index.html) -->

Import from clipboard

Paste your webpage below. It will be converted to Markdown.

Advanced permission required

Your current role can only read. Ask the system administrator to acquire write and comment permission.

This team is disabled

Sorry, this team is disabled. You can't edit this note.

This note is locked

Sorry, only owner can edit this note.

Reach the limit

Sorry, you've reached the max length this note can be.
Please reduce the content or divide it to more notes, thank you!

Import from Gist

Import from Snippet

or

Export to Snippet

Are you sure?

Do you really want to delete this note?
All users will lose their connection.

Create a note from template

Create a note from template

Oops...
This template is not available.
Upgrade
All
  • All
  • Team
No template found.

Create custom template

Upgrade

Delete template

Do you really want to delete this template?
Turn this template into a regular note and keep its content, versions, and comments.

This page need refresh

You have an incompatible client version.
Refresh to update.
New version available!
See releases notes here
Refresh to enjoy new features.
Your user state has changed.
Refresh to load new user state.

Sign in

Forgot password

or

By clicking below, you agree to our terms of service.

Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
Wallet ( )
Connect another wallet

New to HackMD? Sign up

Help

  • English
  • 中文
  • Français
  • Deutsch
  • 日本語
  • Español
  • Català
  • Ελληνικά
  • Português
  • italiano
  • Türkçe
  • Русский
  • Nederlands
  • hrvatski jezik
  • język polski
  • Українська
  • हिन्दी
  • svenska
  • Esperanto
  • dansk

Documents

Help & Tutorial

How to use Book mode

How to use Slide mode

API Docs

Edit in VSCode

Install browser extension

Get in Touch

Feedback

Discord

Send us email

Resources

Releases

Pricing

Blog

Policy

Terms

Privacy

Cheatsheet

Syntax Example Reference
# Header Header 基本排版
- Unordered List
  • Unordered List
1. Ordered List
  1. Ordered List
- [ ] Todo List
  • Todo List
> Blockquote
Blockquote
**Bold font** Bold font
*Italics font* Italics font
~~Strikethrough~~ Strikethrough
19^th^ 19th
H~2~O H2O
++Inserted text++ Inserted text
==Marked text== Marked text
[link text](https:// "title") Link
![image alt](https:// "title") Image
`Code` Code 在筆記中貼入程式碼
```javascript
var i = 0;
```
var i = 0;
:smile: :smile: Emoji list
{%youtube youtube_id %} Externals
$L^aT_eX$ LaTeX
:::info
This is a alert area.
:::

This is a alert area.

Versions and GitHub Sync
Get Full History Access

  • Edit version name
  • Delete

revision author avatar     named on  

More Less

No updates to save
Compare
    Choose a version
    No search result
    Version not found
Sign in to link this note to GitHub
Learn more
This note is not linked with GitHub
 

Feedback

Submission failed, please try again

Thanks for your support.

On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

Please give us some advice and help us improve HackMD.

 

Thanks for your feedback

Remove version name

Do you want to remove this version name and description?

Transfer ownership

Transfer to
    Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

      Link with GitHub

      Please authorize HackMD on GitHub
      • Please sign in to GitHub and install the HackMD app on your GitHub repo.
      • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
      Learn more  Sign in to GitHub

      Push the note to GitHub Push to GitHub Pull a file from GitHub

        Authorize again
       

      Choose which file to push to

      Select repo
      Refresh Authorize more repos
      Select branch
      Select file
      Select branch
      Choose version(s) to push
      • Save a new version and push
      • Choose from existing versions
      Include title and tags
      Available push count

      Pull from GitHub

       
      File from GitHub
      File from HackMD

      GitHub Link Settings

      File linked

      Linked by
      File path
      Last synced branch
      Available push count

      Danger Zone

      Unlink
      You will no longer receive notification when GitHub file changes after unlink.

      Syncing

      Push failed

      Push successfully