<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
! Qu'est-ce que R2STATS ?

R2STATS est une interface graphique pour la modélisation des données à l'aide des GLM (//Generalized Linear Models//) et des GLMM (//Generalized Linear Mixed Models//) sous le logiciel libre [[R|http://www.r-project.org]].

R est un logiciel libre et gratuit que vous pouvez télécharger et installer autant de fois que le voulez sur n'importe quelle machine. Nativement, son interface graphique est relativement frustre car c'est essentiellement un environnement de calcul qui fonctionne avec des commandes que l'on écrit dans une fenêtre spéciale qu'on appelle "console".

J'ai écrit cette interface graphique en utilisant les bibliothèques ~RGtk2 et gWidgets de Michael Lawrence et John Verzani, qui assurent le lien entre R et la librairie graphique GTK. L'estimation des paramètres pour les GLMM est assurée en arrière-plan par l'excellente librairie lme4 de Douglas Bates.

R2STATS est né de mon expérience d'enseignement à l'université de Rennes 2 avec des étudiants en sciences humaines. Quand je me suis rendu compte que je passais plus de temps à enseigner le langage de R que les statistiques elles-mêmes, j'ai décidé de procéder autrement.

! Nouvelles

* Janvier 2015 : le livre "Psychologie statistique avec R" est épuisé depuis Novembre 2014. L'éditeur Springer a par ailleurs décidé de se recentrer sur le marché anglophone et a abandonné la collection Pratique R. Celle-ci a néanmoins migré intégralement chez l'éditeur EDP Sciences et on peut retrouver le livre chez cet éditeur dans une [[version revue et corrigée|http://laboutique.edpsciences.fr/produit/773/9782759817566/Psychologie%20statistique%20avec%20R]].
[img(15%+,+)[screenshots/psystatsEDP.jpg][http://www.springer.com/psychology/book/978-2-8178-0424-8]]
* Juin 2013 : le livre [[Psychologie statistique avec R|http://www.springer.com/psychology/book/978-2-8178-0424-8]] a reçu le [[label Tangente|http://www.infinimath.com/espace_lecture.php?corps=livres]], de la revue de vulgarisation mathématique du même nom. C'est une heureuse surprise car je suis grand fan de cette revue que je lis depuis des années ! Une [[fiche de lecture|http://www.infinimath.com/espace_note.php?id=200]] lui est associée sur le site de la revue.
* Janvier 2013 : toutes les bases théoriques nécessaires à la manipulation des librairies AtelieR et R2STATS sont exposées en détail dans l'ouvrage qui vient de paraître : Noël, Y. (2013). [[Psychologie statistique avec R|http://www.springer.com/psychology/book/978-2-8178-0424-8]], coll. Pratique R, Paris : Springer.
[img(15%+,+)[screenshots/psystats.png][http://www.springer.com/psychology/book/978-2-8178-0424-8]]
* Octobre 2012 : R2STATS existe maintenant en espagnol (merci à Thierry Marivain) et en polonais (Lukasz Daniel).
* Novembre 2011 : une nouvelle librairie, nommée AtelieR, est téléchargeable sur ce site par la même procédure que R2STATS. Il suffit de remplacer le nom "R2STATS" par "AtelieR" dans toutes les commandes indiquées à la rubrique Installation. AtelieR permet de réaliser des analyses bayésiennes élémentaires (sur des proportions, des tables de contingence, des variances et des moyennes), avec des fonctions intéressantes de recherche automatique du meilleur modèle. Elle inclut aussi des ateliers d'illustration de concepts statistiques élémentaires (échantillonnage, théorème central limite) qui peuvent être utile dans l'enseignement.
* Octobre 2011 : R2STATS est désormais disponible en version anglaise et française. Si vous souhaitez contribuer à une traduction dans une autre langue, n'hésitez pas à [[me contacter|mailto:yvonnick.noel@uhb.fr]].

!Citation

Si vous trouvez R2STATS ou AtelieR utile pour vos travaux, le format de citation peut être obtenu à l'aide de la commande citation() en R. Par exemple : citation("R2STATS")
Je me suis fixé le cahier des charges suivant en développant le logiciel :
* {{{généralité}}} : il devait être capable d'estimer les paramètres des modèles les plus courants en psychologie (ANOVA, régression, ANCOVA), ainsi que ceux des modèles loglinéaires (construits comme des modèles multinomiaux dans R2STATS), et aussi ceux de modèles plus spécialisés (modèles dynamiques, modèles de réponse à l'item, modèles hiérarchiques et à effets aléatoires),
* {{{ergonomie}}} : pour obtenir une analyse, ses résultats numériques, et les graphiques associés, le nombre de clics nécessaire et la distance parcourue à l'écran par la souris doivent être minimaux,
* {{{exhaustivité et cohérence statistique}}} : à l'issue d'une analyse, il n'est pas nécessaire d'aller rechercher dans des menus complexes d'autres analyses complémentaires, celles-ci sont automatiquement fournies dans les résultats,
* {{{graphiques automatiques}}} : à l'issue d'une analyse, il n'y a pas non plus besoin d'aller chercher dans les menus la construction de graphiques appropriés : ceux-ci sont automatiquement créés par l'interface.
* {{{implémentation d'une démarche de modélisation}}} : l'interface est une implémentation des principes du cours de Psychologie Statistique de Rennes 2 :
** toute situation psychologique est modélisée par une hypothèse de distribution sur la mesure d'effet étudiée,
** toutes les hypothèses formulées dans cette situation sont testées par une comparaison de deux ou plus de deux modèles concurrents au sein de cette famille de distribution.
Vous pouvez "tirer" les images pour les agrandir, ou encore faire SHIFT CLIC pour les voir en taille réelle (CTRL CLIC pour revenir à la petite taille).

!Chargement de données

Les données peuvent être chargées (au format .csv européen, virgule décimale et point-virgule comme séparateur de champ) à partir de trois types de sources : depuis une adresse web, depuis un fichier local, ou depuis une librairie R installée sur la machine.

[img(25%+,+)[screenshots/loadfromweb.png]] [img(25%+,+)[screenshots/loadfromdisk.png]]

[img(25%+,+)[screenshots/loadfromlib.png]]

!Edition des données

Les données peuvent être modifiées dans un éditeur, et rapidement recodées.

[img(25%+,+)[screenshots/datagrid.png]] [img(25%+,+)[screenshots/recode.png]]

!Définition de modèle

[img(25%+,+)[screenshots/Mc.png]]

!Résultats numériques

[img(25%+,+)[screenshots/resultMc.png]]

!Résultats graphiques

La construction de graphiques est automatique pour chaque modèle, et on peut rapidement passer d'un graphique à l'autre.

[img(25%+,+)[screenshots/graphMc.png]]

!Comparaison de modèles

R2STATS est conçu pour procéder à des tests par comparaison de modèles, en variant si on le souhaite le type de distribution choisi, la fonction de lien, la structure sur les variables indépendantes, etc.

[img(25%+,+)[screenshots/compare.png]] [img(25%+,+)[screenshots/resultcomp.png]]

!Outils supplémentaires

Un calculateur de probabilité permet d'obtenir facilement des valeurs de statistiques pour une probabilité cumulée donnée (ou l'inverse), dans 7 lois de distribution usuelles (normale, Student, Chi-2, Fisher, Poisson, binomiale, Gamma et Beta).

[img(25%+,+)[screenshots/toolmenu.png]]
[img(25%+,+)[screenshots/testz.png]] [img(25%+,+)[screenshots/testchi2.png]]
[img(25%+,+)[screenshots/testfisher.png]] [img(25%+,+)[screenshots/testbinom.png]]
[[Accueil]]
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
A great opensource Wysiwyg editor. See [[homepage|http://www.fckeditor.net/]]
/***
|''Name:''|FCKeditorPlugin|
|''Description:''|Wysiwyg editor for TiddlyWiki using FCKeditor.|
|''Version:''|1.1.1|
|''Date:''|Dec 21,2007|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.2.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demo:
On the plugin [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], see and edit [[WysiwygDemo]].
!Installation:
#download and unzip [[FCKeditor|http://www.fckeditor.net/download]] (by default, in a wiki subfolder, such that the relative path "fckeditor/fckeditor.js" is right).
#import [[FCKeditorPlugin]] (systemConfig tagged)
#add the following text to MarkupPreHead : {{{<script type="text/javascript" src="fckeditor/fckeditor.js"></script>}}}
#customize FCKeditorPath if needed (in MarkupPreHead and in options below)
#save and reload
#use the <<toolbar editHtml>> button in the tiddler's toolbar (in default ViewTemplate) or add {{{editHtml}}} command in your own toolbar.
! Useful Addons
*[[HTMLFormattingPlugin|http://www.tiddlytools.com/#HTMLFormattingPlugin]] to embed wiki syntax in html tiddlers.<<br>>//__Tips__ : When this plugin is installed, you can use anchor syntax to link tiddlers in wysiwyg mode (example : #example). Anchors are converted back and from wiki syntax when editing.//
*[[TaggedTemplateTweak|http://www.TiddlyTools.com/#TaggedTemplateTweak]] to use alternative ViewTemplate/EditTemplate for tiddler's tagged with specific tag values.
!Configuration options :
|FCKeditor folder (absolute or relative)|<<option txtFCKeditorPath>> |
|FCKeditor custom configuration script path (relative or absolute)<<br>>[[Example|fckeditor/editor/custom_config.js]] : {{{ fckeditor/editor/custom_config.js}}}|<<option txtFCKCustomConfigScript>>|
|Toolbar name ("Default", "Basic" or custom)<<br>>See [[FCKeditor documentation|http://wiki.fckeditor.net/Developer%27s_Guide/Configuration/Toolbar]] for more information on custom toolbars|<<option txtFCKToolbar>>|
|FCKeditor default height (if blank = 500px)|<<option txtFCKheight>>|
|Template called by the {{{wysiwyg}}} button|EditHtmlTemplate|
!Code
***/
//{{{
config.options.txtFCKeditorPath = config.options.txtFCKeditorPath ? config.options.txtFCKeditorPath : "fckeditor/";
config.options.txtFCKCustomConfigScript = config.options.txtFCKCustomConfigScript ? config.options.txtFCKCustomConfigScript : "";
config.options.txtFCKToolbar = config.options.txtFCKToolbar ? config.options.txtFCKToolbar : "";
config.options.txtFCKheight = config.options.txtFCKheight ? config.options.txtFCKheight : "500px";

config.macros.editHtml = {
	handler : function(place,macroName,params,wikifier,paramString,tiddler) {
		var field = params[0];
		var height = params[1] ? params[1] : config.options.txtFCKheight;
		if (typeof FCKeditor=="undefined"){
			displayMessage(config.macros.editHtml.FCKeditorUnavailable);
			config.macros.edit.handler(place,macroName,params,wikifier,paramString,tiddler);

		}
		else if (field) {
			var e = createTiddlyElement(null,"div");
			var fckName = "FCKeditor"+ Math.random();
			if(tiddler.isReadOnly())
				e.setAttribute("readOnly","readOnly");
			e.setAttribute("editHtml",field);
			if (height) e.setAttribute("height",height);
			e.setAttribute("fckName",fckName);
			place.appendChild(e);
			var fck = new FCKeditor(fckName);
			fck.BasePath = config.options.txtFCKeditorPath;
			if (config.options.txtFCKCustomConfigScript) fck.Config["CustomConfigurationsPath"] = config.options.txtFCKCustomConfigScript ;
			if (config.options.txtFCKToolbar) fck.ToolbarSet = config.options.txtFCKToolbar;
			fck.Height=height;
			var re = /^<html>(.*)<\/html>$/m;
			var fieldValue=store.getValue(tiddler,field);
			var htmlValue = re.exec(fieldValue);
			var value = (htmlValue && (htmlValue.length>0)) ? htmlValue[1] : fieldValue;
			value=value.replace(/\[\[([^|\]]*)\|([^\]]*)]]/g,'<a href="#$2">$1</a>');
			config.macros.editHtml.FCKvalues[fckName]=value;
			e.innerHTML = fck.CreateHtml();
		}
	},
        gather : function(e) {
            var name = e.getAttribute("fckName");
            var oEditor = window.FCKeditorAPI ? FCKeditorAPI.GetInstance(name) : null;
            if (oEditor) {
                        var html = oEditor.GetHTML();
			if (html!=null) 
                                    return "<html>"+html.replace(/<a href="#([^>]*)">([^<]*)<\/a>/gi,"[[$2|$1]]")+"</html>"; 
            }	
        },
	FCKvalues : {},
	FCKeditorUnavailable : "FCKeditor was unavailable. Check plugin configuration and reload."
}


window.FCKeditor_OnComplete= function( editorInstance ) {
        var name=editorInstance.Name;
	var value = config.macros.editHtml.FCKvalues[name];
	delete config.macros.editHtml.FCKvalues[name];
	oEditor = FCKeditorAPI.GetInstance(name);
	if (value) oEditor.SetHTML(value);
}

Story.prototype.previousGatherSaveEditHtml = Story.prototype.previousGatherSaveEditHtml ? Story.prototype.previousGatherSaveEditHtml : Story.prototype.gatherSaveFields; // to avoid looping if this line is called several times
Story.prototype.gatherSaveFields = function(e,fields){
	if(e && e.getAttribute) {
		var f = e.getAttribute("editHtml");
		if(f){
			var newVal = config.macros.editHtml.gather(e);
			if (newVal) fields[f] = newVal;
		}
		this.previousGatherSaveEditHtml(e, fields);
	}
};

config.shadowTiddlers.EditHtmlTemplate = config.shadowTiddlers.EditTemplate.replace(/macro='edit text'/,"macro='editHtml text'");

config.commands.editHtml={
	text: "wysiwyg",
	tooltip: "Edit this tiddler with a rich text editor",
	readOnlyText: "",
	handler : function(event,src,title) {
		clearMessage();
		var tiddlerElem = document.getElementById(story.idPrefix + title);
		var fields = tiddlerElem.getAttribute("tiddlyFields");
		story.displayTiddler(null,title,"EditHtmlTemplate",false,null,fields);
		return false;
	}
}

config.shadowTiddlers.ViewTemplate = config.shadowTiddlers.ViewTemplate.replace(/\+editTiddler/,"+editTiddler editHtml");

//}}}
/***
|''Name:''|FrenchTranslationPlugin-TW253 by ocalTW and Nicolas Syssoieff |
|''Description:''|Translation of TiddlyWiki 2.5.3 into French |
|''Author:''|ocalTW ( FrenchTranslationPlugin (at) ocalTW (dot) com ) and Nicolas Syssoieff (nicolas.syssoieff+translation (at) gmail (dot) com) |
|''Source:''|http://www.tiddlywiki.fr#FrenchTranslationPlugin |
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/association/locales/core/en/locale.en.js |
|''Version:''|0.3.9|
|''Date:''|Aug 18th, 2009|
|''Comments:''|Mail at http://groups.google.com/group/TiddlyWikiFR |
|''History:''|Translations:<br>v2.1.3 by Jacques Turbé<br>v2.2 by ~BidiX<br>v2.3.x & v2.4.x by ocalTW<br>v2.5.1 up to 2.5.3 by ocalTW and Nicolas Syssoieff |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.5.3|
***/

//{{{
//--
//-- Translateable strings
//--

// Strings in "double quotes" should be translated; strings in 'single quotes' should be left alone

config.locale = "fr"; // W3C language tag

if (config.options.txtUserName == 'YourName') // do not translate this line, but do translate the next line
    merge(config.options,{txtUserName: "VotreNom"});

merge(config.tasks,{
    save: {text: "enregistrer", tooltip: "Enregistrer les modifications dans ce TiddlyWiki", action: saveChanges},
    sync: {text: "synchroniser", tooltip: "Synchroniser les modifications avec d'autres fichiers ou serveurs TiddlyWiki", content: '<<sync>>'},
    importTask: {text: "importer", tooltip: "Importer des tiddlers et des plugins depuis d'autres fichiers ou serveurs TiddlyWiki", content: '<<importTiddlers>>'},
    tweak: {text: "configurer", tooltip: "Configurer l'apparence et le comportement de TiddlyWiki", content: '<<options>>'},
    upgrade: {text: "mettre à jour", tooltip: "Mettre à jour le noyau de TiddlyWiki", content: '<<upgrade>>'},
    plugins: {text: "plugins", tooltip: "Gérer les plugins installés", content: '<<plugins>>'}
});

// Options that can be set in the options panel and/or cookies
merge(config.optionsDesc,{
    txtUserName: "Nom d'utilisateur",
    chkRegExpSearch: "Utiliser les expressions régulières dans les recherches",
    chkCaseSensitiveSearch: "Recherche sensible à la casse",
    chkIncrementalSearch: "Recherche incrémentale touche par touche",
    chkAnimate: "Activer les animations",
    chkSaveBackups: "Générer un backup à chaque enregistrement",
    chkAutoSave: "Enregistrer automatiquement les modifications",
    chkGenerateAnRssFeed: "Générer un flux RSS à chaque enregistrement",
    chkSaveEmptyTemplate: "Générer un modèle vide empty.html à chaque enregistrement",
    chkOpenInNewWindow: "Ouvrir les liens externes dans une nouvelle fenêtre",
    chkToggleLinks: "Cliquer sur les liens des tiddlers déjà ouverts les ferme",
    chkHttpReadOnly: "Masquer les fonctions d'édition lors des consultations par HTTP",
    chkForceMinorUpdate: "Ne mettre à jour ni le nom d'utilisateur, ni la date lors de l'édition des tiddlers",
    chkConfirmDelete: "Demander une confirmation avant de supprimer un tiddler",
    chkInsertTabs: "Utiliser la touche 'tab' pour insérer une tabulation au lieu de changer de champ",
    txtBackupFolder: "Nom du répertoire à utiliser pour les backups",
    txtMaxEditRows: "Nombre maximum de lignes dans les zones d'édition",
    txtTheme: "Nom du thème à utiliser",
    txtFileSystemCharSet: "Jeu de caractères à utiliser pour l'enregistrement (uniquement pour Firefox/Mozilla)"});

merge(config.messages,{
    customConfigError: "Problèmes rencontrés pendant le chargement des plugins. Consulter 'PluginManager' pour plus de détails",
    pluginError: "Erreur : %0",
    pluginDisabled: "Plugin non éxécuté car désactivé par le label 'systemConfigDisable'",
    pluginForced: "Plugin exécuté de façon forcée par l'utilisation du label 'systemConfigForce'",
    pluginVersionError: "Plugin non éxécuté car il requiert une version plus récente de TiddlyWiki",
    nothingSelected: "Vous devez d'abord sélectionner un ou plusieurs items",
    savedSnapshotError: "Ce fichier TiddlyWiki ne semble pas être conforme ou n'a pas été enregistré correctement. Consulter http://www.tiddlywiki.com/#Download pour de plus amples détails",
    subtitleUnknown: "(inconnu)",
    undefinedTiddlerToolTip: "Le tiddler '%0' n'existe pas encore",
    shadowedTiddlerToolTip: "Le tiddler '%0' n'existe pas encore, mais a déjà un contenu par défaut",
    tiddlerLinkTooltip: "%0 - %1, %2",
    externalLinkTooltip: "Lien externe vers %0",
    noTags: "Il n'y a pas de tiddlers avec des tags",
    notFileUrlError: "Vous devez enregistrer ce TiddlyWiki dans un fichier avant de pouvoir enregistrer vos modifications",
    cantSaveError: "Impossible d'enregistrer les modifications.\n- Soit votre navigateur ne supporte pas cette fonction (Firefox, Internet Explorer, Safari et Opera fonctionnent s'ils sont configurés correctement)\n- Soit le chemin d'accès à votre fichier TiddlyWiki contient des caractères illégaux\n- Soit le fichier TiddlyWiki a été déplacé ou renommé",
    invalidFileError: "Le fichier original '%0' ne semble pas être un TiddlyWiki valide",
    backupSaved: "Backup enregistré",
    backupFailed: "Echec de l'enregistrement du fichier backup",
    rssSaved: "Flux RSS enregistré",
    rssFailed: "Echec de l'enregistrement du fichier de flux RSS",
    emptySaved: "Modèle vide 'empty.html' enregistré",
    emptyFailed: "Echec de l'enregistrement du modèle TiddlyWiki vide 'empty.html'",
    mainSaved: "Fichier TiddlyWiki enregistré",
    mainFailed: "Echec de l'enregistrement du fichier TiddlyWiki. Vos modifications ne sont pas enregistrées",
    macroError: "Erreur dans la macro <<\%0>>",
    macroErrorDetails: "Erreur pendant l'éxécution de la macro <<\%0>>:\n%1",
    missingMacro: "Macro non trouvée",
    overwriteWarning: "Un tiddler nommé '%0' existe déjà. Cliquer sur OK pour l'écraser",
    unsavedChangesWarning: "ATTENTION! Certaines modifications ne sont pas enregistrées dans le fichier TiddlyWiki\n\nCliquer sur 'OK' pour les enregistrer\nCliquer sur 'ANNULER' pour les ignorer",
    confirmExit: "--------------------------------\n\nCertaines modifications ne sont pas enregistrées dans TiddlyWiki. Si vous continuez ces modifications seront perdues\n\n--------------------------------",
    saveInstructions: "Enregistrer les Modifications",
    unsupportedTWFormat: "Format de TiddlyWiki non supporté '%0'",
    tiddlerSaveError: "Erreur pendant l'enregistrement du tiddler '%0'",
    tiddlerLoadError: "Erreur pendant le chargement du tiddler '%0'",
    wrongSaveFormat: "Impossible d'enregistrer avec le format de stockage '%0'. Utiliser un format standard pour enregistrer.",
    invalidFieldName: "Nom de champ invalide %0",
    fieldCannotBeChanged: "Le champ '%0' ne peut pas être modifié",
    loadingMissingTiddler: "Tentative de récupération du tiddler '%0' à partir du serveur '%1' à :\n\n'%2' dans l'espace de travail '%3'",
    upgradeDone: "La mise à jour en version %0 est effectuée\n\nCliquer sur OK pour recharger la nouvelle version de TiddlyWiki"});

merge(config.messages.messageClose,{
    text: "fermer",
    tooltip: "fermer cette zone de messages"});

config.messages.backstage = {
    open: {text: "barre d'outils", tooltip: "Ouvrir la barre d'outils pour effectuer des tâches de maintenance : synchronisation, export, import, mise à jour, gestion des plugins"},
    close: {text: "fermer", tooltip: "Fermer la barre d'outils"},
    prompt: "Outils : ",
    decal: {
        edit: {text: "éditer", tooltip: "Editer le tiddler '%0'"}
    }
};

config.messages.listView = {
    tiddlerTooltip: "Cliquer pour une vue complète de ce tiddler",
    previewUnavailable: "(aperçu non disponible)"
};

config.messages.dates.months = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "aout", "septembre", "octobre", "novembre","décembre"];
config.messages.dates.days = ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"];
config.messages.dates.shortMonths = ["jan.", "fev.", "mar.", "avr.", "mai", "juin", "juil", "aou.", "sep.", "oct.", "nov.", "dec."];
config.messages.dates.shortDays = ["dim", "lun", "mar", "mer", "jeu", "ven", "sam"];
// suffixes for dates, eg "1st","2nd","3rd"..."30th","31st"
config.messages.dates.daySuffixes = ["er","","","","","","","","","",
        "","","","","","","","","","",
        "","","","","","","","","","",
        ""];
config.messages.dates.am = "matin";
config.messages.dates.pm = "après-midi";

merge(config.messages.tiddlerPopup,{
    });

merge(config.views.wikified.tag,{
    labelNoTags: "pas de label",
    labelTags: "labels : ",
    openTag: "Ouvrir le label '%0'",
    tooltip: "Afficher les tiddlers ayant pour label '%0'",
    openAllText: "Tout ouvrir",
    openAllTooltip: "Ouvrir tous ces tiddlers",
    popupNone: "Pas d'autres tiddlers avec le label '%0'"});

merge(config.views.wikified,{
    defaultText: "Le tiddler '%0' n'existe pas encore. Double-cliquer pour le créer",
    defaultModifier: "(manquant)",
    shadowModifier: "(tiddler masqué par défaut)",
    dateFormat: "DD MMM YYYY", // Utilisé pour changer le format de la date (ici : "YYYY MMM DD"), ne pas changer les lettres D (jour), M (mois) ou Y (année)
    createdPrompt: "créé le"});

merge(config.views.editor,{
    tagPrompt: "Entrer des labels séparés par des espaces, [[entre double crochets]] si nécessaire, ou ajouter des labels existants :",
    defaultText: "Entrer le texte pour '%0'"});

merge(config.views.editor.tagChooser,{
    text: "labels",
    tooltip: "Sélectionner des labels existants à ajouter à ce tiddler",
    popupNone: "Aucun label défini",
    tagTooltip: "Ajouter le label '%0'"});

merge(config.messages,{
    sizeTemplates:
        [
        {unit: 1024*1024*1024, template: "%0\u00a0GB"},
        {unit: 1024*1024, template: "%0\u00a0MB"},
        {unit: 1024, template: "%0\u00a0KB"},
        {unit: 1, template: "%0\u00a0B"}
        ]});

merge(config.macros.search,{
    label: "recherche",
    prompt: "Rechercher dans ce TiddlyWiki",
    accessKey: "F",
    successMsg: "%0 tiddlers trouvés contenant %1",
    failureMsg: "Aucun tiddler ne contient %0"});

merge(config.macros.tagging,{
	label: "avec ce label : ",
	labelNotTag: "aucun tiddler avec ce label",
	tooltip: "Liste des tiddlers avec le label '%0'"});

merge(config.macros.timeline,{
    dateFormat: "DD MMM YYYY"}); // Utilisé pour changer le format de la date (ici : "YYYY MMM DD"), ne pas changer les lettres D (jour), M (mois) ou Y (année)

merge(config.macros.allTags,{
    tooltip: "Afficher les tiddlers avec le label '%0'",
    noTags: "Aucun tiddler n'a de label"});

config.macros.list.all.prompt = "Tous les tiddlers classés par ordre alphabétique";
config.macros.list.missing.prompt = "Tiddlers pointés par un lien mais non créés";
config.macros.list.orphans.prompt = "Tiddlers orphelins qui ne sont référencés par aucun autre tiddler";
config.macros.list.shadowed.prompt = "Tiddlers masqués avec contenu par défaut";
config.macros.list.touched.prompt = "Tiddlers modifiés localement";

merge(config.macros.closeAll,{
    label: "fermer tout",
    prompt: "Fermer tous les tiddlers affichés (sauf ceux en cours d'édition)"});

merge(config.macros.permaview,{
    label: "permalien",
    prompt: "Lien vers une URL contenant tous les tiddlers affichés actuellement"});

merge(config.macros.saveChanges,{
    label: "enregistrer",
    prompt: "Enregistrer tous les tiddlers du TiddlyWiki",
    accessKey: "S"});

merge(config.macros.newTiddler,{
    label: "nouveau tiddler",
    prompt: "Créer un nouveau tiddler",
    title: "Nouveau Tiddler",
    accessKey: "N"});

merge(config.macros.newJournal,{
    label: "nouveau journal",
    prompt: "Créer un nouveau tiddler avec la date et l'heure",
    accessKey: "J"});

merge(config.macros.options,{
    wizardTitle: "Réglage des options avancées",
    step1Title: "Ces options sont enregistrées dans des cookies dans votre navigateur",
    step1Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='false' name='chkUnknown'>Afficher les options inconnues</input>",
    unknownDescription: "//(inconnu)//",
    listViewTemplate: {
        columns: [
            {name: 'Option', field: 'option', title: "Option", type: 'String'},
            {name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
            {name: 'Name', field: 'name', title: "Nom", type: 'String'}
            ],
        rowClasses: [
            {className: 'lowlight', field: 'lowlight'}
            ]}
    });

merge(config.macros.plugins,{
    wizardTitle: "Gérer les plugins",
    step1Title: "Plugins actifs et chargés actuellement",
    step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
    skippedText: "(Ce plugin n'a pas été éxécuté car il a été ajouté après le chargement de ce fichier TiddlyWiki)",
    noPluginText: "Aucun plugin n'est installé",
    confirmDeleteText: "Etes-vous sûr de vouloir effacer ce(s) plugin(s) :\n\n%0",
    removeLabel: "supprimer le label 'systemConfig'",
    removePrompt: "Supprimer le label 'systemConfig'",
    deleteLabel: "supprimer",
    deletePrompt: "Supprimer définitivement ces tiddlers ",
    listViewTemplate: {
        columns: [
            {name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
            {name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
            {name: 'Description', field: 'Description', title: "Description", type: 'String'},
            {name: 'Version', field: 'Version', title: "Version", type: 'String'},
            {name: 'Size', field: 'size', tiddlerLink: 'size', title: "Taille", type: 'Size'},
            {name: 'Forced', field: 'forced', title: "Forcé", tag: 'systemConfigForce', type: 'TagCheckbox'},
            {name: 'Disabled', field: 'disabled', title: "Désactivé", tag: 'systemConfigDisable', type: 'TagCheckbox'},
            {name: 'Executed', field: 'executed', title: "Chargé", type: 'Boolean', trueText: "Yes", falseText: "No"},
            {name: 'Startup Time', field: 'startupTime', title: "Temps de démarrage", type: 'String'},
            {name: 'Error', field: 'error', title: "Etat", type: 'Boolean', trueText: "Error", falseText: "OK"},
            {name: 'Log', field: 'log', title: "Log", type: 'StringList'}
            ],
        rowClasses: [
            {className: 'error', field: 'error'},
            {className: 'warning', field: 'warning'}
            ]}
    });

merge(config.macros.toolbar,{
    moreLabel: "(plus)",
    morePrompt: "Afficher les commandes supplémentaires",
    lessLabel: "(moins)",
    lessPrompt: "Masquer les commandes supplémentaires",
    separator: "|"
    });

merge(config.macros.refreshDisplay,{
    label: "actualiser",
    prompt: "Actualiser tout le TiddlyWiki"
    });

merge(config.macros.importTiddlers,{
    readOnlyWarning: "Impossible d'importer dans un TiddlyWiki en lecture seule. Ouvrir le TiddlyWiki depuis une URL 'file://'",
    wizardTitle: "Importer des tiddlers depuis un autre fichier ou serveur",
    step1Title: "Etape 1: Localiser le serveur ou le fichier TiddlyWiki",
    step1Html: "Spécifier le type de serveur : <select name='selTypes'><option value=''>Choisir...</option></select><br>Entrer l'URL ou le chemin ici : <input type='text' size=50 name='txtPath'><br>...ou rechercher un fichier en local : <input type='file' size=50 name='txtBrowse'><br><hr>...ou sélectionner une source pré-définie : <select name='selFeeds'><option value=''>Choisir...</option></select>",
    openLabel: "ouvrir",
    openPrompt: "Ouvrir la connexion vers ce fichier ou ce serveur",
    openError: "Problèmes pour récupérer le fichier TiddlyWiki",
    statusOpenHost: "Accès à l'hôte",
    statusGetWorkspaceList: "Récupération de la liste des espaces de travail",
    step2Title: "Etape 2: Choisir l'espace de travail",
    step2Html: "Entrer le nom de l'espace de travail : <input type='text' size=50 name='txtWorkspace'><br>...ou sélectionner un espace de travail : <select name='selWorkspace'><option value=''>Choisir...</option></select>",
    cancelLabel: "annuler",
    cancelPrompt: "Annuler l'importation",
    statusOpenWorkspace: "Ouverture de l'espace de travail",
    statusGetTiddlerList: "Récupération de la liste des tiddlers disponibles",
    errorGettingTiddlerList: "Erreur pendant la récupération des tiddlers, cliquer sur 'Annuler' pour ré-essayer",
    step3Title: "Etape 3: Choisir les tiddlers à importer",
    step3Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='true' name='chkSync'>Lier ces tiddlers à ce serveur pour pouvoir synchroniser les modifications ultérieures</input><br><input type='checkbox' name='chkSave'>Enregistrer les détails de ce serveur dans un tiddler 'systemServer' nommé : </input> <input type='text' size=25 name='txtSaveTiddler'>",
    importLabel: "importer",
    importPrompt: "Importer ces tiddlers",
    confirmOverwriteText: "Etes-vous sûr de vouloir remplacer ces tiddlers :\n\n%0",
    step4Title: "Etape 4: Importation de %0 tiddler(s)",
    step4Html: "<input type='hidden' name='markReport'></input>", // DO NOT TRANSLATE
    doneLabel: "terminé",
    donePrompt: "Fermer cet assistant",
    statusDoingImport: "Importation des tiddlers en cours",
    statusDoneImport: "Tous les tiddlers ont été importés",
    systemServerNamePattern: "%2 sur %1",
    systemServerNamePatternNoWorkspace: "%1",
    confirmOverwriteSaveTiddler: "Le tiddler '%0' existe déjà. Cliquer sur 'OK' pour le remplacer avec les détails de ce serveur, ou sur 'Annuler' pour le conserver",
    serverSaveTemplate: "|''Type:''|%0|\n|''URL:''|%1|\n|''Espace de travail:''|%2|\n\nCe tiddler a été créé automatiquement pour enregistrer les détails de ce serveur",
    serverSaveModifier: "(Système)",
    listViewTemplate: {
        columns: [
            {name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
            {name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
            {name: 'Size', field: 'size', tiddlerLink: 'size', title: "Taille", type: 'Size'},
            {name: 'Tags', field: 'tags', title: "Labels", type: 'Tags'}
            ],
        rowClasses: [
            ]}
    });

merge(config.macros.upgrade,{
    wizardTitle: "Mettre à jour le noyau de TiddlyWiki",
    step1Title: "Mettre à jour ou réparer ce TiddlyWiki avec la dernière version",
    step1Html: "Vous allez faire une mise à jour du noyau de TiddlyWiki à la dernière version (depuis <a href='%0' class='externalLink' target='_blank'>%1</a>). Votre contenu sera préservé après la mise à jour.<br><br>Les mise à jour du noyau peuvent interférer avec d'anciens plugins. Si vous rencontrez des problèmes avec le TiddlyWiki après la mise à jour, consulter <a href='http://www.tiddlywiki.org/wiki/CoreUpgrades' class='externalLink' target='_blank'>http://www.tiddlywiki.org/wiki/CoreUpgrades</a>",
    errorCantUpgrade: "Impossible de mettre à jour ce TiddlyWiki. La mise à jour n'est possible que sur des fichiers stockés sur un disque local",
    errorNotSaved: "Enregistrer les changements avant  pouvoir réaliser la mise à jour",
    step2Title: "Confirmer les détails de la mise à jour",
    step2Html_downgrade: "Vous êtes sur le point de faire un retour arrière à la version de TiddlyWiki %0 depuis la version %1.<br><br>Le retour arrière vers une version antérieure du noyau n'est pas recommandée",
    step2Html_restore: "Ce TiddlyWiki semble déjà utiliser la dernière version disponible du noyau (%0).<br><br>Vous pouvez quand même continuer la mise à jour pour vous assurer que le noyau n'a été ni corrompu ni endommagé",
    step2Html_upgrade: "Vous êtes sur le point de faire la mise à jour vers TiddlyWiki en version %0 depuis la version %1",
    upgradeLabel: "mettre à jour",
    upgradePrompt: "Préparation à la mise à jour",
    statusPreparingBackup: "Préparation du backup",
    statusSavingBackup: "Enregistrement du fichier de backup",
    errorSavingBackup: "Problème pour enregistrer le fichier de backup",
    statusLoadingCore: "Chargement du noyau",
    errorLoadingCore: "Erreur de chargement du noyau",
    errorCoreFormat: "Erreur avec le nouveau noyau",
    statusSavingCore: "Enregistrement du nouveau noyau",
    statusReloadingCore: "Rechargement du nouveau noyau",
    startLabel: "démarrer",
    startPrompt: "Démarrer la mise à jour",
    cancelLabel: "annuler",
    cancelPrompt: "Annuler la mise à jour",
    step3Title: "Mise à jour annulée",
    step3Html: "Vous avez annulé la mise à jour"
    });

merge(config.macros.sync,{
    listViewTemplate: {
        columns: [
            {name: 'Selected', field: 'selected', rowName: 'title', type: 'Selector'},
            {name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
            {name: 'Server Type', field: 'serverType', title: "Type de serveur", type: 'String'},
            {name: 'Server Host', field: 'serverHost', title: "Hôte serveur", type: 'String'},
            {name: 'Server Workspace', field: 'serverWorkspace', title: "Espace de travail du serveur", type: 'String'},
            {name: 'Status', field: 'status', title: "Etat de la synchronisation", type: 'String'},
            {name: 'Server URL', field: 'serverUrl', title: "URL du serveur", text: "View", type: 'Link'}
            ],
        rowClasses: [
            ],
        buttons: [
            {caption: "Synchroniser ces tiddlers", name: 'sync'}
            ]},
    wizardTitle: "Synchroniser avec des serveurs et fichiers externes",
    step1Title: "Choisir les tiddlers à synchroniser",
    step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
    syncLabel: "synchroniser",
    syncPrompt: "Synchroniser ces tiddlers",
    hasChanged: "Modifié pendant la déconnexion",
    hasNotChanged: "Non modifié pendant la déconnexion",
    syncStatusList: {
        none: {text: "...", color: "transparent", display:null},
        changedServer: {text: "Modifié sur le serveur", color: '#8080ff', display:null},
        changedLocally: {text: "Modifié pendant la déconnexion", color: '#80ff80', display:null},
        changedBoth: {text: "Changé pendant la déconnexion et sur le serveur", color: '#ff8080', display:null},
        notFound: {text: "Introuvable sur le serveur", color: '#ffff80', display:null},
        putToServer: {text: "Mise à jour enregistrée sur le serveur", color: '#ff80ff', display:null},
        gotFromServer: {text: "Mise à jour récupérée depuis le serveur", color: '#80ffff', display:null}
        }
    });

merge(config.commands.closeTiddler,{
    text: "fermer",
    tooltip: "Fermer ce tiddler"});

merge(config.commands.closeOthers,{
    text: "isoler",
    tooltip: "Fermer tous les autres tiddlers"});

merge(config.commands.editTiddler,{
    text: "éditer",
    tooltip: "Editer ce tiddler",
    readOnlyText: "voir",
    readOnlyTooltip: "Afficher la source de ce tiddler"});

merge(config.commands.saveTiddler,{
    text: "valider",
    tooltip: "Confirmer les modifications effectuées sur ce tiddler"});

merge(config.commands.cancelTiddler,{
    text: "annuler",
    tooltip: "Annuler les modifications de ce tiddler",
    warning: "Etes-vous sûr de vouloir abandonner les modifications de '%0'?",
    readOnlyText: "retour",
    readOnlyTooltip: "Retour à l'affichage normal de ce tiddler"});

merge(config.commands.deleteTiddler,{
    text: "supprimer",
    tooltip: "Supprimer ce tiddler",
    warning: "Confirmez-vous la suppression de '%0'?"});

merge(config.commands.permalink,{
    text: "permalien",
    tooltip: "Permalien de ce tiddler"});

merge(config.commands.references,{
    text: "références",
    tooltip: "Afficher les tiddlers qui font référence à ce tiddler",
    popupNone: "Aucune référence"});

merge(config.commands.jump,{
    text: "atteindre",
    tooltip: "Atteindre un autre tiddler ouvert dans ce document"});

merge(config.commands.syncing,{
    text: "synchronisation",
    tooltip: "Contrôler la synchronisation de ce tiddler avec un serveur ou un fichier externe",
    currentlySyncing: "<div>Actuellement synchronisé via <span class='popupHighlight'>'%0'</span> vers :</"+"div><div>host: <span class='popupHighlight'>%1</span></"+"div><div>workspace: <span class='popupHighlight'>%2</span></"+"div>", // Note escaping of closing <div> tag
    notCurrentlySyncing: "Pas de synchronisation",
    captionUnSync: "Interrompre la synchronisation de ce tiddler",
    chooseServer: "Synchroniser ce tiddler avec un autre serveur :",
    currServerMarker: "\u25cf ",
    notCurrServerMarker: "  "});

merge(config.commands.fields,{
    text: "champs",
    tooltip: "Afficher les champs supplémentaires de ce tiddler",
    emptyText: "Il n'y a pas de champs supplémentaires pour ce tiddler",
    listViewTemplate: {
        columns: [
            {name: 'Field', field: 'field', title: "Champs", type: 'String'},
            {name: 'Value', field: 'value', title: "Valeur", type: 'String'}
            ],
        rowClasses: [
            ],
        buttons: [
            ]}});

merge(config.shadowTiddlers,{
    DefaultTiddlers: "[[PourCommencer]]",
    MainMenu: "[[PourCommencer]]\n\n\n^^~TiddlyWiki version <<version>>\n© 2007 [[UnaMesa|http://www.unamesa.org/]]^^",
    PourCommencer: "Pour bien commencer avec un TiddlyWiki vide, vous devez modifier les tiddlers suivants :\n* SiteTitle & SiteSubtitle: Le titre et le sous-titre du site, visibles ci-dessus (après enregistrement, ils apparaîtront également dans la barre de titre du navigateur)\n* MainMenu: Le menu (généralement à gauche)\n* DefaultTiddlers: Contient le nom des tiddlers que vous souhaitez ouvrir automatiquement au chargement de votre TiddlyWiki\nVous devez également entrer votre nom d'utilisateur pour signer vos modifications : <<option txtUserName>>",
    SiteTitle: "Mon TiddlyWiki",
    SiteSubtitle: "bloc-notes, organiseur personnel interactif, et bien d'autres choses encore ...",
    SiteUrl: "http://www.tiddlywiki.com/",
    OptionsPanel: "Les options de configuration pour adapter votre TiddlyWiki sont enregistrées dans votre navigateur\n\nVotre nom d'utilisateur pour signer vos modifications. Ecrivez-le comme un WikiWord (ex PierreDupont)\n<<option txtUserName>>\n\n<<option chkSaveBackups>> Enregistrer backups\n<<option chkAutoSave>> Enregistrement auto\n<<option chkRegExpSearch>> Recherche avec regexp\n<<option chkCaseSensitiveSearch>> Recherche sensible à la casse\n<<option chkAnimate>> Activer animations\n\n----\nVoir aussi [[OptionsAvancées|AdvancedOptions]]",
    SideBarOptions: '<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options \u00bb" "Modifier les options avancées de TiddlyWiki">>',
    SideBarTabs: '<<tabs txtMainTab "Chrono" "Affichage chronologique" TabTimeline "Tous" "Tous les tiddlers" TabAll "Labels" "Tous les labels" TabTags "Plus" "Autres listes" TabMore>>',
    TabMore: '<<tabs txtMoreTab "Manquants" "Tiddlers manquants" TabMoreMissing "Orphelins" "Tiddlers orphelins" TabMoreOrphans "Masqués" "Tiddlers masqués" TabMoreShadowed>>'
    });

merge(config.annotations,{
    AdvancedOptions: "Ce tiddler masqué permet d'accéder à de nombreuses options avancées",
    ColorPalette: "Les valeurs de ce tiddler masqué déterminent la palette de couleur de l'interface utilisateur de ce ~TiddlyWiki",
    DefaultTiddlers: "Les tiddlers listés dans ce tiddler masqué seront automatiquement affichés à l'ouverture de ce ~TiddlyWiki",
    EditTemplate: "Le gabarit HTML de ce tiddler masqué détermine l'apparence d'un tiddler en mode édition",
    GettingStarted: "Ce tiddler masqué contient des instructions d'utilisation basiques",
    ImportTiddlers: "Ce tiddler masqué permet d'accéder au fonctions d'import des tiddlers",
    MainMenu: "Ce tiddler masqué contient le contenu du menu principal situé dans la colonne de gauche du TiddlyWiki",
    MarkupPreHead: "Ce tiddler est inséré en haut de la section <head> du fichier TiddlyWiki",
    MarkupPostHead: "Ce tiddler est inséré en bas de la section <head> du fichier TiddlyWiki",
    MarkupPreBody: "Ce tiddler est inséré en haut de la section <body> du fichier TiddlyWiki",
    MarkupPostBody: "Ce tiddler est inséré en haut de la section <body> du fichier TiddlyWiki immédiatement après le bloc de script",
    OptionsPanel: "Ce tiddler masqué contient le menu déroulant d'options de la colonne de droite du TiddlyWiki",
    PageTemplate: "Le gabarit HTML de ce tiddler masqué détermine l'apparence complète du TiddlyWiki",
    PluginManager: "Ce tiddler masqué permet d'accéder au gestionnaire de plugins",
    SideBarOptions: "Ce tiddler masqué contient le menu d'options de la colonne de droite du TiddlyWiki",
    SideBarTabs: "Ce tiddler masqué contient le menu en onglets de la colonne de droite du TiddlyWiki",
    SiteSubtitle: "Ce tiddler masqué contient la deuxième partie du titre de la page",
    SiteTitle: "Ce tiddler masqué contient la première partie du titre de la page",
    SiteUrl: "Ce tiddler masqué doit contenir l'URL complète du site utilisée pour la publication",
    StyleSheetColors: "Ce tiddler masqué contient les définitions de style CSS liées à la couleur des différents éléments des pages. 'NE PAS EDITER CE TIDDLER', faire des modifications dans le tiddler masqué StyleSheet",
    StyleSheet: "Ce tiddler peut contenir des définitions de style CSS personnalisées",
    StyleSheetLayout: "Ce tiddler masqué contient les définitions de style CSS liées à la disposition des différents éléments des pages. 'NE PAS EDITER CE TIDDLER', faire des modifications dans le tiddler masqué StyleSheet",
    StyleSheetLocale: "Ce tiddler masqué contient les définitions de style CSS pour la traduction",
    StyleSheetPrint: "Ce tiddler masqué contient les définitions de style CSS pour l'impression",
    TabAll: "Ce tiddler masqué contient l'onglet 'Tous' de la colonne de droite du TiddlyWiki",
    TabMore: "TCe tiddler masqué contient l'onglet 'Plus' de la colonne de droite du TiddlyWiki",
    TabMoreMissing: "Ce tiddler masqué contient l'onglet 'Manquants' de la colonne de droite du TiddlyWiki",
    TabMoreOrphans: "Ce tiddler masqué contient l'onglet 'Orphelins' de la colonne de droite du TiddlyWiki",
    TabMoreShadowed: "Ce tiddler masqué contient l'onglet 'Masqués' de la colonne de droite du TiddlyWiki",
    TabTags: "Ce tiddler masqué contient l'onglet 'Labels' de la colonne de droite du TiddlyWiki",
    TabTimeline: "Ce tiddler masqué contient l'onglet 'Chrono' de la colonne de droite du TiddlyWiki",
    ToolbarCommands: "Ce tiddler masqué détermine quelles commandes sont affichées dans les barre d'outils des tiddlers",
    ViewTemplate: "Le gabarit HTML de ce tiddler masqué détermine l'apparence d'un tiddler en mode normal"
    });

//}}}
!Principe général

R2STATS ne s'utilise pas comme un logiciel de statistiques traditionnel. La plupart des logiciels du commerce en effet vous incitent à utiliser une entrée "technique à utiliser" pour faire ce que vous lui demandez.

Par exemple : je veux comparer deux moyennes, je vais dans le menu "Comparer des moyennes". Cette manière de fonctionner court-circuite totalement la possibilité de détecter les cas de figure où la comparaison de moyennes n'a simplement pas de sens. Les usagers des logiciels de statistiques n'ont que rarement conscience du fait que s'autoriser à résumer les données par une moyenne, c'est déjà faire une hypothèse de modèle sur les données assez forte : la distribution sous-jacente doit être symétrique et unimodale (la valeur descriptive de la moyenne est toute relative dans les autre cas). Cette hypothèse devrait d'abord être mise à l'épreuve.

Dans R2STATS, on construit un modèle de distribution sur la variable dépendante, et ce sont les paramètres de ce modèle de distribution qui font l'objet de divers tests et hypothèses si le modèle général est déjà bien ajusté. Incidemment, si le modèle de la loi normale (par exemple) décrit convenablement les données, alors cela aura du sens de faire de l'inférence sur la moyenne, car la moyenne est le premier paramètre d'une loi normale.

Les psychologues passent souvent beaucoup de temps à réfléchir sur la structure de leur plan d'expérience, autrement dit sur le choix et l'organisation de leurs variables indépendantes. En réalité, la réflexion sur la variable dépendante et sa nature est largement aussi importante pour espérer dire des choses à peu près sensées sur l'effet des variables indépendantes. Utilisez l'arbre de décision ci-dessous pour déterminer le modèle de distribution le plus approprié pour votre variable dépendante.


!Arbre de décision sur les choix de modèles

+++[+ Quelle est la nature de la variable dépendante ?][- Quelle est la nature de la variable dépendante ?]>
Les modalités d'une variable (ses "valeurs" possibles) peuvent être des noms ou étiquettes verbales (oui/non, succès/échec, écoles A, B et C, méthode X, Y, Z, contrôle, etc.), ou des nombres (mesures de temps, de performance, etc.).

Les modalités de votre variable dépendante sont :

 +++[+ Des noms ][- Des noms ]>
On dit d'une telle variable qu'elle est qualitative ou catégorielle. Elle peut compter deux ou plus de deux modalités.

Votre variable dépendante a :

 +++[+ Deux modalités ][- Deux modalités ]>
    Par exemple : succès/échec, oui/non, présent/absent, etc. Les données ne sont pas des nombres. Pour être traitées statistiquement, elles doivent être quantifiées. Ce sont les comptages sur les deux modalités qui vont faire l'objet de l'analyse.
* Si ces comptages présentent une limite supérieure naturelle (Par exemple : nombre de personnes sur 20 qui adoptent un comportement-cible), utilisez un {{{modèle binomial}}} sur les comptages de succès et d'échecs, présentés en deux colonnes. R2STATS peut aussi traiter une variable dépendante constituée de 1 et de 0, si votre variable dépendante est codée ainsi. Il se chargera de faire les comptages pour vous.
* Si ces comptages n'ont pas de limite supérieure naturelle (par exemple : nombre d'actes agressifs observés en une heure chez de jeunes enfants dans une crèche), utilisez un {{{modèle de Poisson}}}.
 ===
 +++[+ Plus de deux modalités ][- Plus de deux modalités ]>
    Par exemple : écoles A, B et C, méthode X, Y, Z, etc. Les données ne sont pas des nombres. Pour être traitées statistiquement, elles doivent être quantifiées. Ce sont les comptages de modalités qui vont faire l'objet de l'analyse. Utilisez un {{{modèle multinomial}}} sur ces comptages, présentés en colonnes.
 ===
 ===
 +++[+ Des nombres ][- Des nombres ]>
On dit d'une telle variable qu'elle est quantitative ou numérique. Elle peut avoir une limite inférieure naturelle (par exemple zéro), ou une limite supérieure, ou les deux.

Votre variable dépendante a :

 +++[+ Seulement une borne inférieure ][- Seulement une borne inférieure ]>
    Par exemple des temps de réaction, ou des mesures de distance. Utilisez un {{{modèle Gamma}}} ou un {{{modèle lognormal}}} (obtenu simplement en modélisant par une loi normale la distribution de la variable préalablement logtransformée). Pour vous assurer que le modèle choisi décrit bien vos données, examinez bien les graphiques quantiles-quantiles pour le modèle Gamma, ou le test de normalité sur les données logtransformées pour le modèle lognormal.
 ===
 +++[+ Une borne inférieure et une borne supérieure ][- Une borne inférieure et une borne supérieure ]>
Utilisez un {{{modèle Beta}}} (non implémenté encore dans la version actuelle de R2STATS).
 ===
 +++[+ Aucune borne ][- Aucune borne ]>
Utilisez un {{{modèle gaussien}}}. Le test de normalité de Shapiro-Wilk permet de se faire une idée de la qualité de l'approximation de la distribution parente par la loi normale.
 ===
 ===
===
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
{{tagClear{
}}}
<<<
!!!!!Revisions
<<<
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 1, date: new Date(2009,2,24)};
//}}}
//{{{
var f=config.formatters[config.formatters.findByField("name","image")];
f.match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
f.lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](?:\(([^,]*),([^\)]*)\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
f.handler=function(w) {
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var floatLeft=lookaheadMatch[1];
		var floatRight=lookaheadMatch[2];
		var width=lookaheadMatch[3];
		var height=lookaheadMatch[4];
		var tooltip=lookaheadMatch[5];
		var src=lookaheadMatch[6];
		var link=lookaheadMatch[7];

		// Simple bracketted link
		var e = w.output;
		if(link) { // LINKED IMAGE
			if (config.formatterHelpers.isExternalLink(link)) {
				if (config.macros.attach && config.macros.attach.isAttachment(link)) {
					// see [[AttachFilePluginFormatters]]
					e = createExternalLink(w.output,link);
					e.href=config.macros.attach.getAttachment(link);
					e.title = config.macros.attach.linkTooltip + link;
				} else
					e = createExternalLink(w.output,link);
			} else 
				e = createTiddlyLink(w.output,link,false,null,w.isStatic);
			addClass(e,"imageLink");
		}

		var img = createTiddlyElement(e,"img");
		if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
		if(width||height) {
			var x=width.trim(); var y=height.trim();
			var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
			var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
			if (x.substr(0,2)=="{{")
				{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			if (y.substr(0,2)=="{{")
				{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			img.style.width=x.trim(); img.style.height=y.trim();
			config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
		}
		if(tooltip) img.title = tooltip;

		// GET IMAGE SOURCE
		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
		else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
			if (config.browser.isIE || config.browser.isSafari) {
				img.onerror=(function(){
					this.src=config.formatterHelpers.resolvePath(this.src,false);
					return false;
				});
			} else
				src=config.formatterHelpers.resolvePath(src,true);
		}
		img.src=src;
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	}
}

config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
	e.title=((stretchW||stretchH)?'DRAG=stretch/shrink, ':'')
		+'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size';
	e.statusMsg='width=%0, height=%1';
	e.style.cursor='move';
	e.originalW=e.style.width;
	e.originalH=e.style.height;
	e.minW=Math.max(e.offsetWidth/20,10);
	e.minH=Math.max(e.offsetHeight/20,10);
	e.stretchW=stretchW;
	e.stretchH=stretchH;
	e.onmousedown=function(ev) { var ev=ev||window.event;
		this.sizing=true;
		this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
		this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
		this.startW=this.offsetWidth;
		this.startH=this.offsetHeight;
		return false;
	};
	e.onmousemove=function(ev) { var ev=ev||window.event;
		if (this.sizing) {
			var s=this.style;
			var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
			var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
			var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
			var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
			if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
			if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
			clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
		}
		return false;
	};
	e.onmouseup=function(ev) { var ev=ev||window.event;
		if (ev.shiftKey) { this.style.width=this.style.height=''; }
		if (ev.ctrlKey)  { this.style.width=this.originalW; this.style.height=this.originalH; }
		this.sizing=false;
		clearMessage();
		return false;
	};
	e.onmouseout=function(ev) { var ev=ev||window.event;
		this.sizing=false;
		clearMessage();
		return false;
	};
}
//}}}
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2009.04.11 [1.9.5] pass current tiddler object into wrapper code so it can be referenced from within 'onclick' scripts
2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 5, date: new Date(2009,4,11)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",

	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var src=lookaheadMatch[1];
			var label=lookaheadMatch[2];
			var tip=lookaheadMatch[3];
			var key=lookaheadMatch[4];
			var show=lookaheadMatch[5];
			var code=lookaheadMatch[6];
			if (src) { // external script library
				var script = document.createElement("script"); script.src = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // inline code
				if (show) // display source in tiddler
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // create 'onclick' command link
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
					var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
					link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
					link.tiddler=w.tiddler;
					link.onclick=function(){
						this.bufferedHTML="";
						try{ var r=eval(this.code);
							if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
								var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
							if(this.bufferedHTML.length)
								s.innerHTML=this.bufferedHTML;
							if((typeof(r)==="string")&&r.length) {
								wikify(r,s,null,this.tiddler);
								return false;
							} else return r!==undefined?r:false;
						} catch(e){alert(e.description||e.toString());return false;}
					};
					link.setAttribute("title",tip||"");
					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
					link.setAttribute("href",URIcode);
					link.style.cursor="pointer";
					if (key) link.accessKey=key.substr(0,1); // single character only
				}
				else { // run script immediately
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
					try	 { var out=eval(c); }
					catch(e) { out=e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}

// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
L'installation de R2STATS passe par 2 étapes :
* [[Installer la dernière version de R]]
* [[Installer la librairie R2STATS]]

Une fois la librairie installée, il suffit de la charger avec la commande : {{{library("R2STATS")}}}

Si vous fermez par mégarde la fenêtre de R2STATS au cours d'une session, il suffit pour la recréer de taper : {{{R2STATS()}}}
L'interface graphique apparaît après quelques secondes (voir les [[Copies d'écran]]).

Pour fonctionner correctement, l'interface R2STATS doit être lancée depuis une version récente de R. Si vous disposez déjà d'une version de R sur votre machine, vérifiez d'abord qu'il s'agit bien de la dernière version.

!Sous Windows

L'installation se fait automatiquement en acceptant par défaut tous les choix proposés par cet [[auto-installeur|http://cran.at.r-project.org/bin/windows/base/release.htm]].

!Sous Linux

Sur toutes les distributions dérivées de Debian (Ubuntu par exemple), des paquets binaires sont disponibles pour R (paquet r-base-core) et un certain nombre de librairies de base dont les noms sont de la forme r-cran-*. Dans un terminal vous pouvez taper :

{{{sudo apt-get install r-base-core}}}

Vous pouvez aussi passer par votre gestionnaire de paquets (Synaptic par exemple) et faire une recherche sur la chaîne "cran".

!Sous Mac

La dernière version de R pour Mac est disponible ici : http://r.research.att.com/, sous forme de paquet binaire auto-installable .pkg.
Avant d'installer les librairies R2STATS et AtelieR, vous devez impérativement avoir la dernière version de R. Comparer le numéro de version qui s'affiche au lancement de R avec celui qui apparaît à la rubrique "news" sur [[cette page|http://www.r-project.org/]].

!Sous Windows
* Lancer R
* Effectuer une mise à jour préalable des packages déjà installés sur votre machine en copiant-collant cette commande dans la console de R : {{{update.packages(ask=FALSE,checkBuilt=TRUE)}}}
* Pour installer R2STATS, copier-coller la totalité de la commande suivante dans la fenêtre de R : {{{install.packages("R2STATS",dependencies=TRUE)}}}

Au cours de l'installation, si l'on demande si vous souhaitez installer GTK, répondez oui.

Pour installer la librairie AtelieR, copier-coller la commande : {{{install.packages("AtelieR",dependencies=TRUE)}}}

!Sous Linux
* GTK est normalement installé par défaut sous Linux. Si ce n'était pas le cas, cherchez et installez le package libgtk3 dans l'installeur de paquets Synaptic.
* Installer la dernière version de R pour votre distribution (facilement trouvable dans Synaptic pour Ubuntu par exemple). Ouvrir un terminal et lancer "R" en mode administrateur : {{{sudo R}}}.
* Copier-coller la commande {{{install.packages("R2STATS",dependencies=TRUE)}}} dans la console de R. Pour installer AtelieR, utiliser la même commande en remplaçant "R2STATS" par "AtelieR".

!Sous Mac
A partir du site http://r.research.att.com/ installez la dernière version de GTK proposée sous forme de paquet binaire .pkg.

Copier-coller ensuite la commande {{{install.packages("R2STATS",dependencies=TRUE)}}} dans la fenêtre de R. Pour installer AtelieR, utiliser la même commande en remplaçant "R2STATS" par "AtelieR".
L'interface R2STATS s'appuie sur la librairie graphique GTK+ pour construire les fenêtres, menus et boutons qui apparaîtront à l'écran.

Celle-ci s'installe automatiquement en lançant cet [[auto-installeur gtk+|http://downloads.sourceforge.net/gtk-win/gtk2-runtime-2.22.0-2010-10-21-ash.exe?download]], et en sélectionnant bien l'option d'installation COMPLETE ("full"). L'installation complète est nécessaire pour éviter certains problèmes de compatibilité apparus depuis la version 2.12.0 de R.
[[Accueil]]
[[Cahier des charges]]
[[Copies d'écran]]
[[Installation]]
[[Guide d'utilisation]]
[[Vidéos]]


^^~R2STATS version 0.69
2015 [[Yvonnick Noël|mailto:yvonnick.noel@uhb.fr]]
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<script type="text/javascript" src="./fckeditor/fckeditor.js"></script>
<!--}}}-->
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class).  In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release.  Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};

// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
	config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE

// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
	background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.formatters.push( {
	name: "nestedSliders",
	match: "\\n?\\+{3}",
	terminator: "\\s*\\={3}\\n?",
	lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
	handler: function(w)
		{
			lookaheadRegExp = new RegExp(this.lookahead,"mg");
			lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
				var defopen=lookaheadMatch[1];
				var cookiename=lookaheadMatch[2];
				var header=lookaheadMatch[3];
				var panelwidth=lookaheadMatch[4];
				var transient=lookaheadMatch[5];
				var hover=lookaheadMatch[6];
				var buttonClass=lookaheadMatch[7];
				var label=lookaheadMatch[8];
				var openlabel=lookaheadMatch[9];
				var panelID=lookaheadMatch[10];
				var blockquote=lookaheadMatch[11];
				var deferred=lookaheadMatch[12];

				// location for rendering button and panel
				var place=w.output;

				// default to closed, no cookie, no accesskey, no alternate text/tip
				var show="none"; var cookie=""; var key="";
				var closedtext=">"; var closedtip="";
				var openedtext="<"; var openedtip="";

				// extra "+", default to open
				if (defopen) show="block";

				// cookie, use saved open/closed state
				if (cookiename) {
					cookie=cookiename.trim().slice(1,-1);
					cookie="chkSlider"+cookie;
					if (config.options[cookie]==undefined)
						{ config.options[cookie] = (show=="block") }
					show=config.options[cookie]?"block":"none";
				}

				// parse label/tooltip/accesskey: [label=X|tooltip]
				if (label) {
					var parts=label.trim().slice(1,-1).split("|");
					closedtext=parts.shift();
					if (closedtext.substr(closedtext.length-2,1)=="=")	
						{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
					openedtext=closedtext;
					if (parts.length) closedtip=openedtip=parts.join("|");
					else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
				}

				// parse alternate label/tooltip: [label|tooltip]
				if (openlabel) {
					var parts=openlabel.trim().slice(1,-1).split("|");
					openedtext=parts.shift();
					if (parts.length) openedtip=parts.join("|");
					else openedtip="hide "+openedtext;
				}

				var title=show=='block'?openedtext:closedtext;
				var tooltip=show=='block'?openedtip:closedtip;

				// create the button
				if (header) { // use "Hn" header format instead of button/link
					var lvl=(header.length>5)?5:header.length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
				btn.innerHTML=title; // enables use of HTML entities in label

				// set extra button attributes
				btn.setAttribute("closedtext",closedtext);
				btn.setAttribute("closedtip",closedtip);
				btn.setAttribute("openedtext",openedtext);
				btn.setAttribute("openedtip",openedtip);
				btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
				btn.defOpen=defopen!=null; // save default open/closed state (boolean)
				btn.keyparam=key; // save the access key letter ("" if none)
				if (key.length) {
					btn.setAttribute("accessKey",key); // init access key
					btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
				}
				btn.setAttribute("hover",hover?"true":"false");
				btn.onmouseover=function(ev) {
					// optional 'open on hover' handling
					if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
						document.onclick.call(document,ev); // close transients
						onClickNestedSlider(ev); // open this slider
					}
					// mouseover on button aligns floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
				}

				// create slider panel
				var panelClass=panelwidth?"floatingPanel":"sliderPanel";
				if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
				var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
				panel.button = btn; // so the slider panel know which button it belongs to
				btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
				panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
				panel.setAttribute("transient",transient=="*"?"true":"false");
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;
				panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }

				// render slider (or defer until shown) 
				w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
				if ((show=="block")||!deferred) {
					// render now if panel is supposed to be shown or NOT deferred rendering
					w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
					// align floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
				}
				else {
					var src = w.source.substr(w.nextMatch);
					var endpos=findMatchingDelimiter(src,"+++","===");
					panel.setAttribute("raw",src.substr(0,endpos));
					panel.setAttribute("blockquote",blockquote?"true":"false");
					panel.setAttribute("rendered","false");
					w.nextMatch += endpos+3;
					if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
				}
			}
		}
	}
)

function findMatchingDelimiter(src,starttext,endtext) {
	var startpos = 0;
	var endpos = src.indexOf(endtext);
	// check for nested delimiters
	while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
		// count number of nested 'starts'
		var startcount=0;
		var temp = src.substring(startpos,endpos-1);
		var pos=temp.indexOf(starttext);
		while (pos!=-1)  { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
		// set up to check for additional 'starts' after adjusting endpos
		startpos=endpos+endtext.length;
		// find endpos for corresponding number of matching 'ends'
		while (startcount && endpos!=-1) {
			endpos = src.indexOf(endtext,endpos+endtext.length);
			startcount--;
		}
	}
	return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
	if (!theTarget) return false;
	var theSlider = theTarget.sliderPanel;
	var isOpen = theSlider.style.display!="none";

	// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
	if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);

	// toggle label
	theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
	// toggle tooltip
	theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));

	// deferred rendering (if needed)
	if (theSlider.getAttribute("rendered")=="false") {
		var place=theSlider;
		if (theSlider.getAttribute("blockquote")=="true")
			place=createTiddlyElement(place,"blockquote");
		wikify(theSlider.getAttribute("raw"),place);
		theSlider.setAttribute("rendered","true");
	}

	// show/hide the slider
	if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
		anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		theSlider.style.display = isOpen ? "none" : "block";

	// reset to default width (might have been changed via plugin code)
	theSlider.style.width=theSlider.defaultPanelWidth;

	// align floater panel position with target button
	if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);

	// if showing panel, set focus to first 'focus-able' element in panel
	if (theSlider.style.display!="none") {
		var ctrls=theSlider.getElementsByTagName("*");
		for (var c=0; c<ctrls.length; c++) {
			var t=ctrls[c].tagName.toLowerCase();
			if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
				{ try{ ctrls[c].focus(); } catch(err){;} break; }
		}
	}
	var cookie=theTarget.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=!isOpen;
		if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
		else window.removeCookie(cookie); // remove cookie if slider is in default display state
	}

	// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
	// prevent clicks *within* a slider button from being processed by browser
	// but allow plain click to bubble up to page background (to close transients, if any)
	if (e.shiftKey || theTarget!=resolveTarget(e))
		{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
	Popup.remove(); // close open popup (if any)
	return false;
}
//}}}
//{{{
// click in document background closes transient panels 
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);

	if (document.nestedSliders_savedOnClick)
		var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
	// if click was inside a popup... leave transient panels alone
	var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
	if (p) return retval;
	// if click was inside transient panel (or something contained by a transient panel), leave it alone
	var p=target; while (p) {
		if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
		p=p.parentNode;
	}
	if (p) return retval;
	// otherwise, find and close all transient panels...
	var all=document.all?document.all:document.getElementsByTagName("DIV");
	for (var i=0; i<all.length; i++) {
		 // if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
		if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
		// otherwise, if the panel is currently visible, close it by clicking it's button
		if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
		if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
	}
	return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
	if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
		// see [[MoveablePanelPlugin]] for use of 'undocked'
		var rightEdge=document.body.offsetWidth-1;
		var panelWidth=panel.offsetWidth;
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
			left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
			if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
		}
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
			if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
			if (left<0) left=0;
		}
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
	{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }

// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
	Morpher.prototype.coreStop = Morpher.prototype.stop;
	Morpher.prototype.stop = function() {
		this.coreStop.apply(this,arguments);
		var e=this.element;
		if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
			// adjust panel overflow and position after animation
			e.style.overflow = "visible";
			if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
		}
	};
}
//}}}
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/***
|Name|SinglePageModePlugin|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Show tiddlers one at a time with automatic permalink, or always open tiddlers at top/bottom of page.|
This plugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one tiddler displayed at a time.
!!!!!Documentation
>see [[SinglePageModePluginInfo]]
!!!!!Configuration
<<<
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)

Notes:
* The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}.
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
<<<
!!!!!Revisions
<<<
2008.10.17 [2.9.6] changed chkSinglePageAutoScroll default to false
| Please see [[SinglePageModePluginInfo]] for previous revision details |
2005.08.15 [1.0.0] Initial Release.  Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts.
<<<
!!!!!Code
***/
//{{{
version.extensions.SinglePageModePlugin= {major: 2, minor: 9, revision: 6, date: new Date(2008,10,17)};
//}}}
//{{{
config.paramifiers.SPM = { onstart: function(v) {
	config.options.chkSinglePageMode=eval(v);
	if (config.options.chkSinglePageMode && config.options.chkSinglePagePermalink && !config.browser.isSafari) {
		config.lastURL = window.location.hash;
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
	}
} };
//}}}
//{{{
if (config.options.chkSinglePageMode==undefined)
	config.options.chkSinglePageMode=false;
if (config.options.chkSinglePagePermalink==undefined)
	config.options.chkSinglePagePermalink=true;
if (config.options.chkSinglePageKeepFoldedTiddlers==undefined)
	config.options.chkSinglePageKeepFoldedTiddlers=false;
if (config.options.chkSinglePageKeepEditedTiddlers==undefined)
	config.options.chkSinglePageKeepEditedTiddlers=false;
if (config.options.chkTopOfPageMode==undefined)
	config.options.chkTopOfPageMode=false;
if (config.options.chkBottomOfPageMode==undefined)
	config.options.chkBottomOfPageMode=false;
if (config.options.chkSinglePageAutoScroll==undefined)
	config.options.chkSinglePageAutoScroll=false;
//}}}
//{{{
config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
{
	if (!config.options.chkSinglePageMode)
		{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
	if (config.lastURL == window.location.hash) return; // no change in hash
	var tids=decodeURIComponent(window.location.hash.substr(1)).readBracketedList();
	if (tids.length==1) // permalink (single tiddler in URL)
		story.displayTiddler(null,tids[0]);
	else { // restore permaview or default view
		config.lastURL = window.location.hash;
		if (!tids.length) tids=store.getTiddlerText("DefaultTiddlers").readBracketedList();
		story.closeAllTiddlers();
		story.displayTiddlers(null,tids);
	}
}


if (Story.prototype.SPM_coreDisplayTiddler==undefined)
	Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
{
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	var tiddlerElem=document.getElementById(story.idPrefix+title); // ==null unless tiddler is already displayed
	var opt=config.options;
	var single=opt.chkSinglePageMode && !startingUp;
	var top=opt.chkTopOfPageMode && !startingUp;
	var bottom=opt.chkBottomOfPageMode && !startingUp;
	if (single) {
		story.forEachTiddler(function(tid,elem) {
			// skip current tiddler and, optionally, tiddlers that are folded.
			if (	tid==title
				|| (opt.chkSinglePageKeepFoldedTiddlers && elem.getAttribute("folded")=="true"))
				return;
			// if a tiddler is being edited, ask before closing
			if (elem.getAttribute("dirty")=="true") {
				if (opt.chkSinglePageKeepEditedTiddlers) return;
				// if tiddler to be displayed is already shown, then leave active tiddler editor as is
				// (occurs when switching between view and edit modes)
				if (tiddlerElem) return;
				// otherwise, ask for permission
				var msg="'"+tid+"' is currently being edited.\n\n";
				msg+="Press OK to save and close this tiddler\nor press Cancel to leave it opened";
				if (!confirm(msg)) return; else story.saveTiddler(tid);
			}
			story.closeTiddler(tid);
		});
	}
	else if (top)
		arguments[0]=null;
	else if (bottom)
		arguments[0]="bottom";
	if (single && opt.chkSinglePagePermalink && !config.browser.isSafari) {
		window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));
		config.lastURL = window.location.hash;
		document.title = wikifyPlain("SiteTitle") + " - " + title;
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
	}
	if (tiddlerElem && tiddlerElem.getAttribute("dirty")=="true") { // editing... move tiddler without re-rendering
		var isTopTiddler=(tiddlerElem.previousSibling==null);
		if (!isTopTiddler && (single || top))
			tiddlerElem.parentNode.insertBefore(tiddlerElem,tiddlerElem.parentNode.firstChild);
		else if (bottom)
			tiddlerElem.parentNode.insertBefore(tiddlerElem,null);
		else this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	} else
		this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	var tiddlerElem=document.getElementById(story.idPrefix+title);
	if (tiddlerElem&&opt.chkSinglePageAutoScroll) {
		// scroll to top of page or top of tiddler
		var isTopTiddler=(tiddlerElem.previousSibling==null);
		var yPos=isTopTiddler?0:ensureVisible(tiddlerElem);
		// if animating, defer scroll until after animation completes
		var delay=opt.chkAnimate?config.animDuration+10:0;
		setTimeout("window.scrollTo(0,"+yPos+")",delay); 
	}
}

if (Story.prototype.SPM_coreDisplayTiddlers==undefined)
	Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function() {
	// suspend single/top/bottom modes when showing multiple tiddlers
	var opt=config.options;
	var saveSPM=opt.chkSinglePageMode; opt.chkSinglePageMode=false;
	var saveTPM=opt.chkTopOfPageMode; opt.chkTopOfPageMode=false;
	var saveBPM=opt.chkBottomOfPageMode; opt.chkBottomOfPageMode=false;
	this.SPM_coreDisplayTiddlers.apply(this,arguments);
	opt.chkBottomOfPageMode=saveBPM;
	opt.chkTopOfPageMode=saveTPM;
	opt.chkSinglePageMode=saveSPM;
}
//}}}
/***
|Name|SinglePageModePluginInfo|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|documentation|
|Description|Documentation for SinglePageModePlugin|
Normally, as you click on the links in TiddlyWiki, more and more tiddlers are displayed on the page. The order of this tiddler display depends upon when and where you have clicked. Some people like this non-linear method of reading the document, while others have reported that when many tiddlers have been opened, it can get somewhat confusing.  SinglePageModePlugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one item displayed at a time.
!!!!!Usage
<<<
When the plugin is enabled, only one tiddler will be displayed at a time and the browser window's titlebar is updated to include the current tiddler title.  The browser's location URL is also updated with a 'permalink' for the current tiddler so that it is easier to create a browser 'bookmark' for the current tiddler.  Alternatively, even when displaying multiple tiddlers //is// permitted, you can still reduce the potential for confusion by forcing  tiddlers to always open at the top (or bottom) of the page instead of being displayed following the tiddler containing the link that was clicked.
<<<
!!!!!Configuration
<<<
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)

Notes:
* {{block{
The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}. You can also use {{{SPM:expression}}}, where 'expression' is any javascript statement that evaluates to true or false.  This allows you to create hard-coded links in other documents that can selectively enable/disable the use of this option based on various programmatic conditions, such as the current username. For example, using
&nbsp;&nbsp;&nbsp;{{{#SPM:config.options.txtUserName!="SomeName"}}}
enables 'one tiddler at a time' display for all users //other than// "~SomeName")}}}
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
<<<
!!!!!Revisions
<<<
2008.10.17 2.9.6 changed chkSinglePageAutoScroll default to false
2008.06.12 2.9.5 corrected 'scroll to top of page' logic in auto-scroll handling
2008.06.11 2.9.4 added chkSinglePageKeepEditedTiddlers option
2008.06.05 2.9.3 in displayTiddler(), bypass single/top/bottom mode handling if startingUp.  Allows multiple tiddlers to be displayed during startup processing (e.g., #story:DefaultTiddlers), even if single/top/bottom mode is enabled.
2008.04.18 2.9.2 in displayTiddler() and checkLastURL(), handling for Unicode in tiddler titles (remove explicit conversion between Unicode and UTF, as this is apparently done automatically by encode/decodeURIComponent, resulting in double-encoding!
2008.04.08 2.9.1 don't automatically add options to AdvancedOptions shadow tiddler
2008.04.02 2.9.0 in displayTiddler(), when single-page mode is in use and a tiddler is being edited, ask for permission to save-and-close that tiddler, instead of just leaving it open.
2008.03.29 2.8.3 in displayTiddler(), get title from tiddler object (if needed).  Fixes errors caused when calling function passes a tiddler *object* instead of a tiddler *title*
2008.03.14 2.8.2 in displayTiddler(), if editing specified tiddler, just move it to top/bottom of story *without* re-rendering (prevents discard of partial edits).
2008.03.06 2.8.1 in paramifier handler, start 'checkURL' timer if chkSinglePageMode is enabled
2008.03.06 2.8.0 added option, {{{config.options.chkSinglePageKeepFoldedTiddlers}}}, so folded tiddlers won't be closed when using single-page mode.  Also, in checkURL(), if hash is a ''permaview'' (e.g., "#foo bar baz"), then display multiple tiddlers rather than attempting to display "foo bar baz" as a single tiddler
2008.03.05 2.7.0 added support for "SPM:" URL paramifier
2008.03.01 2.6.0 in hijack of displayTiddler(), added 'title' argument to closeAllTiddlers() so that target tiddler isn't closed-and-reopened if it was already displayed.  Also, added config.options.chkSinglePageAutoScrolloption to bypass automatic 'scroll into view' logic (note: core still does it's own ensureVisible() handling)
2007.12.22 2.5.3 in checkLastURL(), use decodeURIComponent() instead of decodeURI so that tiddler titles with commas (and/or other punctuation) are correctly handled.
2007.10.26 2.5.2 documentation cleanup
2007.10.08 2.5.1 in displayTiddler(), when using single-page or top-of-page mode, scrollTo(0,0) to ensure that page header is in view.
2007.09.13 2.5.0 for TPM/BPM modes, don't force tiddler to redisplay if already shown.  Allows transition between view/edit or collapsed/view templates, without repositioning displayed tiddler.
2007.09.12 2.4.0 added option to disable automatic permalink feature.  Also, Safari is now excluded from permalinking action to avoid bug where tiddlers don't display after hash is updated.
2007.03.03 2.3.1 fix typo when adding BPM option to AdvancedOptions (prevented checkbox from appearing)
2007.03.03 2.3.0 added support for BottomOfPageMode (BPM) based on request from DaveGarbutt
2007.02.06 2.2.3 in Story.prototype.displayTiddler(), use convertUnicodeToUTF8() for correct I18N string handling when creating URL hash string from tiddler title (based on bug report from BidiX)
2007.01.08 2.2.2 use apply() to invoke hijacked core functions
2006.07.04 2.2.1 in hijack for displayTiddlers(), suspend TPM as well as SPM so that DefaultTiddlers displays in the correct order.
2006.06.01 2.2.0 added chkTopOfPageMode (TPM) handling
2006.02.04 2.1.1 moved global variable declarations to config.* to avoid FireFox 1.5.0.1 crash bug when assigning to globals
2005.12.27 2.1.0 hijack displayTiddlers() so that SPM can be suspended during startup while displaying the DefaultTiddlers (or #hash list).  Also, corrected initialization for undefined SPM flag to "false", so default behavior is to display multiple tiddlers
2005.12.27 2.0.0 Update for TW2.0
2005.11.24 1.1.2 When the back and forward buttons are used, the page now changes to match the URL.  Based on code added by Clint Checketts
2005.10.14 1.1.1 permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them
2005.10.14 1.1.0 added automatic setting of window title and location bar ('auto-permalink').  feature suggestion by David Dickens.
2005.10.09 1.0.1 combined documentation and code in a single tiddler
2005.08.15 1.0.0 Initial Release
<<<
Une interface graphique pour les GLM et les GLMM sous R <<tiddler ToggleRightSidebar with: "-">> Yvonnick Noël
R2STATS

/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.85em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/%
!info
|Name|ToggleRightSidebar|
|Source|http://www.TiddlyTools.com/#ToggleRightSidebar|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|show/hide right sidebar (SideBarOptions)|
Usage
<<<
{{{
<<tiddler ToggleRightSidebar>>
<<tiddler ToggleRightSidebar with: label tooltip>>
}}}
Try it: <<tiddler ToggleRightSidebar##show
	with: {{config.options.chkShowRightSidebar?'►':'◄'}}>>
<<<
Configuration:
<<<
{{{
config.options.chkShowRightSidebar (true)
config.options.txtToggleRightSideBarLabelShow (◄)
config.options.txtToggleRightSideBarLabelHide (►)
}}}
<<<
!end
!show
<<tiddler {{
	var co=config.options;
	if (co.chkShowRightSidebar===undefined) co.chkShowRightSidebar=true;
	var sb=document.getElementById('sidebar');
	var da=document.getElementById('displayArea');
	if (sb) {
		sb.style.display=co.chkShowRightSidebar?'block':'none';
		da.style.marginRight=co.chkShowRightSidebar?'':'1em';
	}
'';}}>><html><nowiki><a href='javascript:;' title="$2"
onmouseover="
	this.href='javascript:void(eval(decodeURIComponent(%22(function(){try{('
	+encodeURIComponent(encodeURIComponent(this.onclick))
	+')()}catch(e){alert(e.description?e.description:e.toString())}})()%22)))';"
onclick="
	var co=config.options;
	var opt='chkShowRightSidebar';
	var show=co[opt]=!co[opt];
	var sb=document.getElementById('sidebar');
	var da=document.getElementById('displayArea');
	if (sb) {
		sb.style.display=show?'block':'none';
		da.style.marginRight=show?'':'1em';
	}
	saveOptionCookie(opt);
	var labelShow=co.txtToggleRightSideBarLabelShow||'&#x25C4;';
	var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25BA;';
	if (this.innerHTML==labelShow||this.innerHTML==labelHide) 
		this.innerHTML=show?labelHide:labelShow;
	this.title=(show?'hide':'show')+' right sidebar';
	var sm=document.getElementById('storyMenu');
	if (sm) config.refreshers.content(sm);
	return false;
">$1</a></html>
!end
%/<<tiddler {{
	var src='ToggleRightSidebar';
	src+(tiddler&&tiddler.title==src?'##info':'##show');
}} with: {{
	var co=config.options;
	var labelShow=co.txtToggleRightSideBarLabelShow||'&#x25C4;';
	var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25BA;';
	'$1'!='$'+'1'?'$1':(co.chkShowRightSidebar?labelHide:labelShow);
}} {{
	var tip=(config.options.chkShowRightSidebar?'hide':'show')+' right sidebar';
	'$2'!='$'+'2'?'$2':tip;
}}>>
|~ViewToolbar|closeTiddler closeOthers +editTiddler > editHtml fields syncing permalink references jump|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
Quelques vidéos sur une ancienne version de R2STATS sont visibles sur [[Dailymotion|http://www.dailymotion.com/fr]]. Les manipulations sont essentiellement les mêmes dans les versions plus récentes.

Tapez simplement R2STATS dans le champ de recherche du site.
if(config.options.txtUserName != "Yvonnick Noël") {
	readOnly = true;
	showBackstage = false;
}
config.options.chkShowRightSidebar=false; 
config.options.chkSinglePageMode=true;