From 8f9cd4df14699b4096c05bf40160f20ad5d8b1f4 Mon Sep 17 00:00:00 2001 From: Stephen Wild Date: Fri, 29 Apr 2022 15:01:28 -0400 Subject: [PATCH] Update to fix MathJax --- CODE_OF_CONDUCT.md | 74 +++ History.markdown | 245 ++++++++ LICENSE.txt | 21 + README.md | 322 ++++++++++ _config.yml | 1 + _includes/custom-head.html | 6 + _includes/disqus_comments.html | 20 + _includes/footer.html | 37 ++ _includes/google-analytics.html | 9 + _includes/head.html | 14 + _includes/header.html | 31 + _includes/social.html | 21 + _layouts/default.html | 24 + _layouts/home.html | 61 ++ _layouts/page.html | 14 + _layouts/post.html | 38 ++ ...e-variables-multilevel-model copy.markdown | 570 ++++++++++++++++++ _sass/minima/_base.scss | 282 +++++++++ _sass/minima/_layout.scss | 342 +++++++++++ _sass/minima/custom-styles.scss | 2 + _sass/minima/custom-variables.scss | 1 + _sass/minima/initialize.scss | 50 ++ _sass/minima/skins/classic.scss | 91 +++ _sass/minima/skins/dark.scss | 95 +++ _sass/minima/skins/solarized-dark.scss | 4 + _sass/minima/skins/solarized.scss | 140 +++++ about.md | 18 + assets/css/style.scss | 7 + assets/minima-social-icons.svg | 50 ++ index.md | 9 + minima.gemspec | 24 + screenshot.png | Bin 0 -> 96543 bytes script/bootstrap | 6 + script/build | 6 + script/cibuild | 15 + script/server | 3 + 36 files changed, 2653 insertions(+) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 History.markdown create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 _includes/custom-head.html create mode 100644 _includes/disqus_comments.html create mode 100644 _includes/footer.html create mode 100644 _includes/google-analytics.html create mode 100644 _includes/head.html create mode 100644 _includes/header.html create mode 100644 _includes/social.html create mode 100644 _layouts/default.html create mode 100644 _layouts/home.html create mode 100644 _layouts/page.html create mode 100644 _layouts/post.html create mode 100644 _posts/2022-04-29-always-centre-variables-multilevel-model copy.markdown create mode 100644 _sass/minima/_base.scss create mode 100644 _sass/minima/_layout.scss create mode 100644 _sass/minima/custom-styles.scss create mode 100644 _sass/minima/custom-variables.scss create mode 100644 _sass/minima/initialize.scss create mode 100644 _sass/minima/skins/classic.scss create mode 100644 _sass/minima/skins/dark.scss create mode 100644 _sass/minima/skins/solarized-dark.scss create mode 100644 _sass/minima/skins/solarized.scss create mode 100644 about.md create mode 100644 assets/css/style.scss create mode 100644 assets/minima-social-icons.svg create mode 100644 index.md create mode 100644 minima.gemspec create mode 100644 screenshot.png create mode 100755 script/bootstrap create mode 100755 script/build create mode 100755 script/cibuild create mode 100755 script/server diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..0757e99 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at parkrmoore@gmail.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/History.markdown b/History.markdown new file mode 100644 index 0000000..bf90d4d --- /dev/null +++ b/History.markdown @@ -0,0 +1,245 @@ +## HEAD + +### Documentation + + * Forward port v2.5.1 release (#399) + * Docs: remove Google+ (#373) + * Update README section on adding favicons to site (#438) + * Fix custom-styles.scss name in README (#610) + * Improve the msg to enable disqus in README (#627) + +### Minor Enhancements + + * Add Keybase to social links (#400) + * Solarized skins (#404) + * Add a placeholder of favicons (#433) + * fix: make page.list_title optional (#303) + * Add stackoverflow to social media list (#443) + * Add social support for dev.to (#410) + * Add GitLab to social (#352) + * Support mutiple authors on post layout (#348) + * Re-implement site footer markup and styles (#448) + * Support pagination through posts in home layout (#450) + * Show the last modified date of posts (#432) + * Set margins of hr to improve readability (#461) + * Export a variable to let users to custom the font family of code (#462) + * Set margin-bottom of pagination (#458) + * Adjust margins of headings to make sections clear (#467) + * Rename favicons.html to custom-head.html (#468) + * Remove RSS icon from the social media list (#470) + * Improve the readablility of blockquotes (#481) + * Extract more color rules into skins (#452) + * Introduce "Dark Minima" skin (#335) + +### Major Enhancements + + * Allow skins to be defined and customized easily (#336) + * Drop support for scalar 'author' configuration (#384) + * Place skins in `minima/skins` to clarify purpose (#479) + +### Bug Fixes + + * Add missing rel=me attributes to social links (#386) + * Set the border radius of highlight (#426) + * Removed unnecessary whitespace-controls (#390) + * fix: overflow auto for tables (#296) + * Add `overflow-wrap: break-word` to body tag (#321) + * Use "rem" unit in relative-font-size mixin (#436) + * Assign static value to variable outside forloop (#437) + * Add font-size styles for elements h5 and h6 (#441) + * Stop prefixing CSS calc with `-webkit-` (#445) + * Improve readability of post titles with diacritics (#449) + * Fix a bug of incorrect parsing of page.modified_date (#455) + * Specify the font size of the root element (#485) + * Fix script used for Google Analytics (#596) + * Open social links in new tabs (#625) + +### Development Fixes + + * Ignore .jekyll-cache (#439) + * Clean up and optimize .gitignore (#475) + * [chore] Normalize Travis CI builds (#480) + * chore(deps): bump Ruby version (#510) + * Conditionally load GFM-parser gem in CI builds (#535) + * Improve CI workflow configuration (#609) + * Migrate from TravisCI to GitHub Actions (#633) + +## 2.5.1 + +### Minor Enhancements + + * Allow use and testing with Jekyll 4.x (#398) + +### Bug Fixes + + * Footer overlapping issue (Support Microsoft Explorer 11) (#248) + * Update multiline config comment. (#346) + +### Development Fixes + + * remove deprecated `sudo: false` in .travis.yml (#347) + +## 2.5.0 + +### Bug Fixes + + * Add `jekyll-feed` plugin in config (#228) + +### Minor Enhancements + + * Stick footer for short posts (#223) + * Consolidate trigger SVG paths (#148) + +## 2.4.1 + +### Bug Fixes + + * Reintroduce removed social includes for backwards compatibility (#217) + +## 2.4.0 + +### Minor Enhancements + + * Add better system fonts (#205) + * Remove whitespace due to Liquid tags in generated HTML (#202) + * Adding Mastodon to the social networks (#198) + +### Bug Fixes + + * social icons should resolve baseurl properly (#201) + * fix: styling main element in IE 11 (#199) + +### Documentation + + * Improve thw wording in index.md (#175) + * Update config description comment (#203) + +## 2.3.0 + + * Add option to show excerpts on the homepage (#90) + * Handle RSS feed with jekyll-feed (#183) + * Test build with Ruby 2.4 on CI (#184) + * Document how to customize navigation links (#192) + +## 2.2.1 + + * Revert social_sites hash for retrocompatibility (#190) + +## 2.2.0 + +### Minor Enhancements + + * handling content outside of posts (#88) + * Add default table styles (#144) + * Add `jekyll-seo-tag` dependency (#139) + * Add Microformats markup (#160) + * Add more social links (#141) + +### Documentation + + * Docs: clarification about page title (#142) + +## 2.1.1 / 2017-04-13 + +### Minor Enhancements + + * Close #55: Improve mobile user experience (#62) + * Remove incomplete status from spec summary (#63) + * Use date_format if set in configuration (#70) + * Corrected misspelled word (#72) + * Scale headings relative to base-font-size (#78) + * Remove 2.0 post-install message (#82) + * Fixes #115 - Only include the nav tag if there are pages to be displayed in the menu (#116) + * Fixes #80, #106. Make the hamburger work with pure CSS. (#111) + * add `header_pages` config to link only specific files in header (#52) + * More easily customizable CSS (#117) + * Use relative size for fonts and line-height (#103) + * Add 404 page from jekyll `master` (#121) + +### Development Fixes + + * Remove duplicate .sass-cache (#71) + * Demo minima on GitHub Pages (#76) + * Remove the Rakefile (#118) + +### Documentation + + * Update README with theme content description (#91) + * Update default local URL (#120) + +## 2.1.0 / 2016-11-15 + +### Minor Enhancements + + * Update gemspec to require at least Jekyll 3.3 (#59) + * Use `absolute_url` filter for disqus (#66) + * replace `example/index.html` with `example/index.md` (#58) + +### Development Fixes + + * Example should require Jekyll 3.3 (#61) + +## 2.0.0 / 2016-10-06 + +### Minor Enhancements + + * priority to site.url when site.github.url is available (#46) + * Move contents of the index.html page to the 'home' layout (#48) + * Use new `absolute_url` and `relative_url` filters in minima (#57) + +### Development Fixes + + * Use standardized tab size of 2 spaces (#44) + +### Major Enhancements + + * move `css/` directory from jekyll into `assets/` (#43) + +### Bug Fixes + + * Fix html proofer errors (#49) + * Update gem regex to include new `assets` directory (#54) + +## 1.2.0 / 2016-09-12 + +### Minor Enhancements + + * Look to site.url when available (#35) + +### Documentation + + * Move instruction for CSS in install section (#37) + +## 1.1.0 / 2016-09-07 + +### Major Enhancements + + * Add support to Disqus (#21) + * Google analytics support (#26) + * Look for `site.github.url` if it exists (#25) + +### Minor Enhancements + + * Fixed Flash Of Unstyled SVG (#12) + * Added "author" in footer instead of double title (#22) + +### Documentation + + * Document how to link to the theme styles (#18) + * Update Example to resemble Default site (#24) + +### Development Enhancements + + * Use upstream gemspec file matcher (#9) + * Fix gemspec regex (#31) + * Add Travis and a basic smoke test (#33) + +## 1.0.1 / 2016-07-28 + + * include `_layouts`, `_includes`, and `_sass` dir in gem (#6) + +## 1.0.0 / 2016-07-27 + + * default layout: html `lang` attribute should allow user customization (#3) + * Use `normalize_whitespace` filter for meta description (#4) + * Fix repo's URL in contributing (#5) diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..0e7ecd8 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016-present Parker Moore and the minima contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..23e57aa --- /dev/null +++ b/README.md @@ -0,0 +1,322 @@ +# minima + +*Minima is a one-size-fits-all Jekyll theme for writers*. It's Jekyll's default (and first) theme. It's what you get when you run `jekyll new`. + +***Disclaimer:** The information here may vary depending on the version you're using. Please refer to the `README.md` bundled +within the theme-gem for information specific to your version or by pointing your browser to the Git tag corresponding to your +version. e.g. https://github.com/jekyll/minima/blob/v2.5.0/README.md* +*Running `bundle show minima` will provide you with the local path to your current theme version.* + + +[Theme preview](https://jekyll.github.io/minima/) + +![minima theme preview](/screenshot.png) + +## Installation + +Add this line to your Jekyll site's Gemfile: + +```ruby +gem "minima" +``` + +And then execute: + + $ bundle + + +## Contents At-A-Glance + +Minima has been scaffolded by the `jekyll new-theme` command and therefore has all the necessary files and directories to have a new Jekyll site up and running with zero-configuration. + +### Layouts + +Refers to files within the `_layouts` directory, that define the markup for your theme. + + - `default.html` — The base layout that lays the foundation for subsequent layouts. The derived layouts inject their contents into this file at the line that says ` {{ content }} ` and are linked to this file via [FrontMatter](https://jekyllrb.com/docs/frontmatter/) declaration `layout: default`. + - `home.html` — The layout for your landing-page / home-page / index-page. [[More Info.](#home-layout)] + - `page.html` — The layout for your documents that contain FrontMatter, but are not posts. + - `post.html` — The layout for your posts. + +#### Home Layout + +`home.html` is a flexible HTML layout for the site's landing-page / home-page / index-page.
+ +##### *Main Heading and Content-injection* + +From Minima v2.2 onwards, the *home* layout will inject all content from your `index.md` / `index.html` **before** the **`Posts`** heading. This will allow you to include non-posts related content to be published on the landing page under a dedicated heading. *We recommended that you title this section with a Heading2 (`##`)*. + +Usually the `site.title` itself would suffice as the implicit 'main-title' for a landing-page. But, if your landing-page would like a heading to be explicitly displayed, then simply define a `title` variable in the document's front matter and it will be rendered with an `

` tag. + +##### *Post Listing* + +This section is optional from Minima v2.2 onwards.
+It will be automatically included only when your site contains one or more valid posts or drafts (if the site is configured to `show_drafts`). + +The title for this section is `Posts` by default and rendered with an `

` tag. You can customize this heading by defining a `list_title` variable in the document's front matter. + + +### Includes + +Refers to snippets of code within the `_includes` directory that can be inserted in multiple layouts (and another include-file as well) within the same theme-gem. + + - `disqus_comments.html` — Code to markup disqus comment box. + - `footer.html` — Defines the site's footer section. + - `google-analytics.html` — Inserts Google Analytics module (active only in production environment). + - `head.html` — Code-block that defines the `` in *default* layout. + - `custom-head.html` — Placeholder to allow users to add more metadata to ``. + - `header.html` — Defines the site's main header section. By default, pages with a defined `title` attribute will have links displayed here. + - `social.html` — Renders social-media icons based on the `minima:social_links` data in the config file. + + +### Sass + +Refers to `.scss` files within the `_sass` directory that define the theme's styles. + + - `minima/skins/classic.scss` — The "classic" skin of the theme. *Used by default.* + - `minima/initialize.scss` — A component that defines the theme's *skin-agnostic* variable defaults and sass partials. + It imports the following components (in the following order): + - `minima/custom-variables.scss` — A hook that allows overriding variable defaults and mixins. (*Note: Cannot override styles*) + - `minima/_base.scss` — Sass partial for resets and defines base styles for various HTML elements. + - `minima/_layout.scss` — Sass partial that defines the visual style for various layouts. + - `minima/custom-styles.scss` — A hook that allows overriding styles defined above. (*Note: Cannot override variables*) + +Refer the [skins](#skins) section for more details. + + +### Assets + +Refers to various asset files within the `assets` directory. + + - `assets/css/style.scss` — Imports sass files from within the `_sass` directory and gets processed into the theme's + stylesheet: `assets/css/styles.css`. + - `assets/minima-social-icons.svg` — A composite SVG file comprised of *symbols* related to various social-media icons. + This file is used as-is without any processing. Refer [section on social networks](#social-networks) for its usage. + + +### Plugins + +Minima comes with [`jekyll-seo-tag`](https://github.com/jekyll/jekyll-seo-tag) plugin preinstalled to make sure your website gets the most useful meta tags. See [usage](https://github.com/jekyll/jekyll-seo-tag#usage) to know how to set it up. + + +## Usage + +Have the following line in your config file: + +```yaml +theme: minima +``` + + +### Customizing templates + +To override the default structure and style of minima, simply create the concerned directory at the root of your site, copy the file you wish to customize to that directory, and then edit the file. +e.g., to override the [`_includes/head.html `](_includes/head.html) file to specify a custom style path, create an `_includes` directory, copy `_includes/head.html` from minima gem folder to `/_includes` and start editing that file. + +The site's default CSS has now moved to a new place within the gem itself, [`assets/css/style.scss`](assets/css/style.scss). + +In Minima 3.0, if you only need to customize the colors of the theme, refer to the subsequent section on skins. To have your +*CSS overrides* in sync with upstream changes released in future versions, you can collect all your overrides for the Sass +variables and mixins inside a sass file placed at `_sass/minima/custom-variables.scss` and all other overrides inside a sass file +placed at path `_sass/minima/custom-styles.scss`. + +You need not maintain entire partial(s) at the site's source just to override a few styles. However, your stylesheet's primary +source (`assets/css/style.scss`) should contain the following: + + - Front matter dashes at the very beginning (can be empty). + - Directive to import a skin. + - Directive to import the base styles (automatically loads overrides when available). + +Therefore, your `assets/css/style.scss` should contain the following at minimum: + +```sass +--- +--- + +@import "minima/skins/{{ site.minima.skin | default: 'classic' }}"; +@import "minima/initialize"; +``` + +#### Skins + +Minima 3.0 supports defining and switching between multiple color-palettes (or *skins*). + +``` +. +├── minima.scss +└── minima + └── _syntax-highlighting.scss +``` + + +A skin is a Sass file placed in the directory `_sass/minima/skins` and it defines the variable defaults related to the "color" +aspect of the theme. It also embeds the Sass rules related to syntax-highlighting since that is primarily related to color and +has to be adjusted in harmony with the current skin. + +The default color palette for Minima is defined within `_sass/minima/skins/classic.scss`. To switch to another available skin, +simply declare it in the site's config file. For example, to activate `_sass/minima/skins/dark.scss` as the skin, the setting +would be: + +```yaml +minima: + skin: dark +``` + +As part of the migration to support skins, some existing Sass variables have been retired and some **have been redefined** as +summarized in the following table: + +Minima 2.0 | Minima 3.0 +--------------- | ---------- +`$brand-color` | `$link-base-color` +`$grey-*` | `$brand-*` +`$orange-color` | *has been removed* + +##### Available skins + +- classic +- dark +- solarized +- solarized-dark + +### Customize navigation links + +This allows you to set which pages you want to appear in the navigation area and configure order of the links. + +For instance, to only link to the `about` and the `portfolio` page, add the following to your `_config.yml`: + +```yaml +header_pages: + - about.md + - portfolio.md +``` + + +### Change default date format + +You can change the default date format by specifying `site.minima.date_format` +in `_config.yml`. + +``` +# Minima date format +# refer to http://shopify.github.io/liquid/filters/date/ if you want to customize this +minima: + date_format: "%b %-d, %Y" +``` + + +### Extending the `` + +You can *add* custom metadata to the `` of your layouts by creating a file `_includes/custom-head.html` in your source directory. For example, to add favicons: + +1. Head over to [https://realfavicongenerator.net/](https://realfavicongenerator.net/) to add your own favicons. +2. [Customize](#customization) default `_includes/custom-head.html` in your source directory and insert the given code snippet. + + +### Enabling comments (via Disqus) + +Optionally, if you have a Disqus account, you can tell Jekyll to use it to show a comments section below each post. + +:warning: `url`, e.g. `https://example.com`, must be set in you config file for Disqus to work. + +To enable it, after setting the url field, you also need to add the following lines to your Jekyll site: + +```yaml + disqus: + shortname: my_disqus_shortname +``` + +You can find out more about Disqus' shortnames [here](https://help.disqus.com/installation/whats-a-shortname). + +Comments are enabled by default and will only appear in production, i.e., `JEKYLL_ENV=production` + +If you don't want to display comments for a particular post you can disable them by adding `comments: false` to that post's YAML Front Matter. + +### Author Metadata + +From `Minima-3.0` onwards, `site.author` is expected to be a mapping of attributes instead of a simple scalar value: + +```yaml +author: + name: John Smith + email: "john.smith@foobar.com" +``` + +To migrate existing metadata, update your config file and any reference to the object in your layouts and includes as summarized below: + +Minima 2.x | Minima 3.0 +------------- | ------------------- +`site.author` | `site.author.name` +`site.email` | `site.author.email` + + +### Social networks + +You can add links to the accounts you have on other sites, with respective icon, by adding one or more of the following options in your config. +From `Minima-3.0` onwards, the usernames are to be nested under `minima.social_links`, with the keys being simply the social-network's name: + +```yaml +minima: + social_links: + twitter: jekyllrb + github: jekyll + stackoverflow: "11111" + dribbble: jekyll + facebook: jekyll + flickr: jekyll + instagram: jekyll + linkedin: jekyll + pinterest: jekyll + telegram: jekyll + microdotblog: jekyll + keybase: jekyll + + mastodon: + - username: jekyll + instance: example.com + - username: jekyll2 + instance: example.com + + gitlab: + - username: jekyll + instance: example.com + - username: jekyll2 + instance: example.com + + youtube: jekyll + youtube_channel: UC8CXR0-3I70i1tfPg1PAE1g + youtube_channel_name: CloudCannon +``` + + +### Enabling Google Analytics + +To enable Google Analytics, add the following lines to your Jekyll site: + +```yaml + google_analytics: UA-NNNNNNNN-N +``` + +Google Analytics will only appear in production, i.e., `JEKYLL_ENV=production` + +### Enabling Excerpts on the Home Page + +To display post-excerpts on the Home Page, simply add the following to your `_config.yml`: + +```yaml +show_excerpts: true +``` + + +## Contributing + +Bug reports and pull requests are welcome on GitHub at https://github.com/jekyll/minima. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. + +## Development + +To set up your environment to develop this theme, run `script/bootstrap`. + +To test your theme, run `script/server` (or `bundle exec jekyll serve`) and open your browser at `http://localhost:4000`. This starts a Jekyll server using your theme and the contents. As you make modifications, your site will regenerate and you should see the changes in the browser after a refresh. + +## License + +The theme is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). diff --git a/_config.yml b/_config.yml index a1dff64..71c0a65 100644 --- a/_config.yml +++ b/_config.yml @@ -30,6 +30,7 @@ github_username: sjwild # Build settings theme: minima +markdown: kramdown plugins: - jekyll-feed diff --git a/_includes/custom-head.html b/_includes/custom-head.html new file mode 100644 index 0000000..8559a67 --- /dev/null +++ b/_includes/custom-head.html @@ -0,0 +1,6 @@ +{% comment %} + Placeholder to allow defining custom head, in principle, you can add anything here, e.g. favicons: + + 1. Head over to https://realfavicongenerator.net/ to add your own favicons. + 2. Customize default _includes/custom-head.html in your source directory and insert the given code snippet. +{% endcomment %} diff --git a/_includes/disqus_comments.html b/_includes/disqus_comments.html new file mode 100644 index 0000000..d9400f2 --- /dev/null +++ b/_includes/disqus_comments.html @@ -0,0 +1,20 @@ +{%- if page.comments != false and jekyll.environment == "production" -%} + +
+ + +{%- endif -%} diff --git a/_includes/footer.html b/_includes/footer.html new file mode 100644 index 0000000..707d523 --- /dev/null +++ b/_includes/footer.html @@ -0,0 +1,37 @@ +
+ + +
+ + + + + +
+ +
diff --git a/_includes/google-analytics.html b/_includes/google-analytics.html new file mode 100644 index 0000000..b8b4d38 --- /dev/null +++ b/_includes/google-analytics.html @@ -0,0 +1,9 @@ + + diff --git a/_includes/head.html b/_includes/head.html new file mode 100644 index 0000000..9ee139f --- /dev/null +++ b/_includes/head.html @@ -0,0 +1,14 @@ + + + + + {%- seo -%} + + {%- feed_meta -%} + {%- if jekyll.environment == 'production' and site.google_analytics -%} + {%- include google-analytics.html -%} + {%- endif -%} + + {%- include custom-head.html -%} + + diff --git a/_includes/header.html b/_includes/header.html new file mode 100644 index 0000000..ed5a382 --- /dev/null +++ b/_includes/header.html @@ -0,0 +1,31 @@ + diff --git a/_includes/social.html b/_includes/social.html new file mode 100644 index 0000000..1370f8b --- /dev/null +++ b/_includes/social.html @@ -0,0 +1,21 @@ +{%- assign social = site.minima.social_links -%} + + diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..553c74e --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,24 @@ + + + + {%- include head.html -%} + + + + {%- include header.html -%} + +
+
+ {{ content }} +
+
+ + {%- include footer.html -%} + + + + + + diff --git a/_layouts/home.html b/_layouts/home.html new file mode 100644 index 0000000..622b5e1 --- /dev/null +++ b/_layouts/home.html @@ -0,0 +1,61 @@ +--- +layout: default +--- + +
+ {%- if page.title -%} +

{{ page.title }}

+ {%- endif -%} + + {{ content }} + + + {% if site.paginate %} + {% assign posts = paginator.posts %} + {% else %} + {% assign posts = site.posts %} + {% endif %} + + + {%- if posts.size > 0 -%} + {%- if page.list_title -%} +

{{ page.list_title }}

+ {%- endif -%} +
    + {%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%} + {%- for post in posts -%} +
  • + +

    + + {{ post.title | escape }} + +

    + {%- if site.show_excerpts -%} + {{ post.excerpt }} + {%- endif -%} +
  • + {%- endfor -%} +
+ + {% if site.paginate %} +
+ +
+ {%- endif %} + + {%- endif -%} + +
diff --git a/_layouts/page.html b/_layouts/page.html new file mode 100644 index 0000000..01e4b2a --- /dev/null +++ b/_layouts/page.html @@ -0,0 +1,14 @@ +--- +layout: default +--- +
+ +
+

{{ page.title | escape }}

+
+ +
+ {{ content }} +
+ +
diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 0000000..c9a03be --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,38 @@ +--- +layout: default +--- +
+ +
+

{{ page.title | escape }}

+ +
+ +
+ {{ content }} +
+ + {%- if site.disqus.shortname -%} + {%- include disqus_comments.html -%} + {%- endif -%} + + +
diff --git a/_posts/2022-04-29-always-centre-variables-multilevel-model copy.markdown b/_posts/2022-04-29-always-centre-variables-multilevel-model copy.markdown new file mode 100644 index 0000000..baf6f33 --- /dev/null +++ b/_posts/2022-04-29-always-centre-variables-multilevel-model copy.markdown @@ -0,0 +1,570 @@ +--- +layout: post +title: "Always center your variables in multilevel models" +date: 2022-04-02 21:00:00 -0400 +categories: blog +usemathjax: true +--- +$$ y = x^2 $$ +This is a post about why you should always center your variables in multilevel models. Always. And by always, I mean it depends. But I think as a default, you should center your variables in a multilevel model unless there is a strong reason to do otherwise. + +What inspired this post is a recent article, [Worldwide increases in adolescent loneliness](https://www.sciencedirect.com/science/article/pii/S0140197121000853), by Jean Twenge, Jonathan Haidt, et al. In the article, they claim to show that the psychological well-being of adolescents began to decline in 2012, and that this decline is associated with increased smart phone access and internet usage. Twitter had several threads or tweets ([here](https://twitter.com/sTeamTraen/status/1421860781503700993), [here](https://twitter.com/cjsewall9/status/1421461127892979712), and [here](https://twitter.com/academia_shores/status/1428052060512129029), for example) about why Twenge et al. were wrong. I have no informed view about whether smartphone access and internet usage are associated with loneliness. That isn't my area of expertise, and I don't want to give the impression that it is. + +But I am able to critique their model. + +Part of their argument rests on a multilevel model they conduct on smartphone access and internet usage. But they make a common but elementary error in how they structure their model. Once you properly structure the model, their effects mostly disappear. + +Before I look at their model, I am going to make a few assumptions: +* There is no measurement error, that is, their constructs measure what they say the constructs should measure and does so accurately +* The predictors they include are correct and appropriate for what they are looking at +* Their decisions to include or exclude certain countries are justifiable +* Missing data is Missing Completely At Random (MCAR), so missing countries/year have no effect on the outcome +* It makes sense to aggregate the data to conduct an ecological regression + +In short, I am going to assume that everything was done correctly except for the final two models. + +You can find the code I used for my models [here](https://github.com/sjwild/sjwild.github.io/raw/main/assets/2021-09-02-always_centre-variables-multilevel-model/Load_and_Prep_PISA_data.R). If I am wrong, please tell me so I can correct it. + +# _Twenge et al._'s results +In their final two models, Twenge et al. run a comprehensive model using smartphone access and internet usage as their treatment variables--that is, as their main variables of interest. Here is a copy of their results. + +![alt text](https://github.com/sjwild/sjwild.github.io/raw/main/assets/2021-09-02-always-centre-variables-multilevel-model/Table_4_Twenge_et_al.png "Image of Table 4 from Twenge et al..") + +In both their models, smartphone access and internet usage are statistically significant. Unfortunately, Twenge et al.'s model is misspecified, and their results showing smartphone access and internet usage are not significant once we make the requisite adjustments. + +# How is the model misspecified? +Multilevel models are loved in some fields (looking at you, education and psychology) and reviled in others (looking at you, economics). The issue is the use of random effects. Random effects are awesome, but they lead to biased esimates when the fixed effects are correlated with the random effects. + +To see what I mean, take a look at the image below. In it, I have chosen three illustrative countries and their smartphone access. As you can see, there is a relationship between smartphone access in 2012 and the rate of smartphone access increases over time. Countries with lower rates of smartphone access increase at faster rates. That is, we can say that the intercept (initial smartphone access) is negatively correlated with the slope (change in access over time): in countries with higher initial smartphone access, smartphone access increases more slowly compared to countries with lower initial smartphone access. As a result, smartphone access coverges over time. + +![alt text](https://github.com/sjwild/sjwild.github.io/raw/main/assets/2021-09-02-always-centre-variables-multilevel-model/example_smushed_effects.png "Illustrative example showing slopes increase faster for lower intial rates of smartphone access") + +Here is what is happening in our multilevel model. The model is trying to estimate the effect of smartphone access in two areas: within each country, and between each country. The problem is that the model has no way to separate these two effects. Therefore the coefficient ends up "smushed" (the technical term, according to Hoffman, 2015), and reflects both within country and between country effects. + +But we can help it by breaking the variable in two. + +The most common way to make the adjustment is to center the predictors in the model. Three methods are common: group-mean centering, grand-mean centering, and baseline centering. + +With group-mean centering--also called adaptive centering, person-mean centering, or centering within context--for each observation in a group, we subtract out the mean for that group. So for a given predictor what we have is $$x_{ij} - \bar{x_{j}}$$. Using this method, we can decompose our effect into within groups and between groups. Why? Because we took out the group differences. This type of centering is common in cross-sectional multilevel models. + +With grand-mean centering, we take out the grand mean or any other meaningful constant. We then have $$x_{i} - \bar{x}$$. We often see this in bayesian modelling, where we center our predictors and then divide by the standard deviation (this helps the samplers run faster). + +The third option is baseline centering. Baseline centering is similar to grand-mean centering. But instead of the grand-mean, we subtract out the value at a baseline--say, the value at time 0. This method is common for longitudinal data. + +With all three centering methods, it is common to add the group means as predictors, to help detect any between group differences. This is relevant for the work in Twenge et al., because there might be an effect of smartphone access within a country, but not between countries, or vice versa. Or there might be an effect within and between countries. Or there might not be. + +# What happens when we center our variables? +As you can see in the image for our illustrative example below, one we remove the means for our baseline year, 2012, the slopes are not longer correlated with the values at year 0. The model can therefore pick up both within and between effects if me include the initial values in the model as well. Mission accomplished. + +![alt text](https://github.com/sjwild/sjwild.github.io/raw/main/assets/2021-09-02-always-centre-variables-multilevel-model/example_smushed_effects_0_intercept.png "Illustrative example showing intercept at zero") + +# Modelling PISA data +Moving on to Twenge et al. Let's take a look at their comprehensive model for the effect of smartphone access. I've done some data cleaning to try duplicate their coding, and I think I managed to get reasonably close to their results. + +```r + +> mod_sp <- lmer(loneliness ~ 1 + Smartphone + + year + + SL.UEM.TOTL.ZS + + I(NY.GDP.MKTP.CD / 1e9) + + SI.POV.GINI + + SP.DYN.TFRT.IN + + (1 + year | cnt), + data = df) +> summary(mod_sp) + +Linear mixed model fit by REML ['lmerMod'] +Formula: loneliness ~ 1 + Smartphone + year + SL.UEM.TOTL.ZS + I(NY.GDP.MKTP.CD/1e+09) + + SI.POV.GINI + SP.DYN.TFRT.IN + (1 + year | cnt) + Data: df + +REML criterion at convergence: -66.4 + +Scaled residuals: + Min 1Q Median 3Q Max +-1.79365 -0.53021 -0.02431 0.51172 1.37116 + +Random effects: + Groups Name Variance Std.Dev. Corr + cnt (Intercept) 1.318e-02 0.11480 + year 5.882e-05 0.00767 0.02 + Residual 2.103e-03 0.04586 +Number of obs: 61, groups: cnt, 24 + +Fixed effects: + Estimate Std. Error t value +(Intercept) 1.389e+00 1.794e-01 7.741 +Smartphone 3.684e-03 1.117e-03 3.297 +year 1.815e-02 5.656e-03 3.209 +SL.UEM.TOTL.ZS -3.444e-03 3.714e-03 -0.927 +I(NY.GDP.MKTP.CD/1e+09) -5.470e-05 3.473e-05 -1.575 +SI.POV.GINI 8.355e-03 4.450e-03 1.877 +SP.DYN.TFRT.IN -4.608e-02 6.341e-02 -0.727 + +Correlation of Fixed Effects: + (Intr) Smrtph year SL.UEM I(NY.G SI.POV +Smartphone -0.624 +year 0.384 -0.752 +SL.UEM.TOTL -0.125 -0.023 0.366 +I(NY.GDP.MK 0.129 0.030 -0.002 0.137 +SI.POV.GINI -0.594 0.198 -0.242 -0.345 -0.398 +SP.DYN.TFRT -0.324 -0.016 0.129 0.347 0.055 -0.373 +fit warnings: +Some predictor variables are on very different scales: consider rescaling + + + +> mod_int <- lmer(loneliness ~ 1 + Internet + + year + + SL.UEM.TOTL.ZS + + I(NY.GDP.MKTP.CD / 1e9) + + SI.POV.GINI + + SP.DYN.TFRT.IN + + (1 + year | cnt), + data = df) +boundary (singular) fit: see ?isSingular +Warning message: +Some predictor variables are on very different scales: consider rescaling + +> summary(mod_int) + +Linear mixed model fit by REML ['lmerMod'] +Formula: loneliness ~ 1 + Internet + year + SL.UEM.TOTL.ZS + I(NY.GDP.MKTP.CD/1e+09) + + SI.POV.GINI + SP.DYN.TFRT.IN + (1 + year | cnt) + Data: df + +REML criterion at convergence: -69.6 + +Scaled residuals: + Min 1Q Median 3Q Max +-1.77904 -0.45423 -0.00952 0.55724 1.67040 + +Random effects: + Groups Name Variance Std.Dev. Corr + cnt (Intercept) 1.056e-02 0.102743 + year 1.003e-05 0.003167 1.00 + Residual 2.867e-03 0.053545 +Number of obs: 61, groups: cnt, 24 + +Fixed effects: + Estimate Std. Error t value +(Intercept) 1.569e+00 1.626e-01 9.650 +Internet 7.030e-02 3.512e-02 2.002 +year 1.814e-02 8.130e-03 2.232 +SL.UEM.TOTL.ZS -2.972e-03 3.628e-03 -0.819 +I(NY.GDP.MKTP.CD/1e+09) -4.400e-05 3.431e-05 -1.282 +SI.POV.GINI 4.903e-03 4.285e-03 1.144 +SP.DYN.TFRT.IN -3.368e-02 6.175e-02 -0.546 + +Correlation of Fixed Effects: + (Intr) Intrnt year SL.UEM I(NY.G SI.POV +Internet -0.566 +year 0.447 -0.890 +SL.UEM.TOTL -0.163 0.013 0.227 +I(NY.GDP.MK 0.118 0.061 -0.037 0.157 +SI.POV.GINI -0.457 -0.074 0.000 -0.358 -0.437 +SP.DYN.TFRT -0.405 0.121 -0.029 0.369 0.098 -0.407 +fit warnings: +Some predictor variables are on very different scales: consider rescaling +optimizer (nloptwrap) convergence code: 0 (OK) +boundary (singular) fit: see ?isSingular + + +``` + +They made an interesting choice here with GDP. I think they took gross GDP and then divided by 1 billion. When I do so, I get coefficients that are similar. + +If you look at the correlation of the fixed effects, you can see that they are -0.624 for smartphone access and -0.584 for internet usage. Those are pretty strong, and are good suggestions that our coefficients are biased. + + +## Centering the variables +Now let's center our variables at their first observed values. For most countries, this is 2012, but for a few it is 2015. We are also going to grand-mean center the baseline means, to help break the correlation between the random effects and the fixed effects. + + +```r + +> df <- df %>% + group_by(cnt) %>% + mutate(Smartphone_2012 = dplyr::first(Smartphone, order_by = year), + Internet_2012 = dplyr::first(Internet, order_by = year), + SL.UEM.TOTL.ZS_2012 = dplyr::first(SL.UEM.TOTL.ZS, order_by = year), + NY.GDP.MKTP.CD_2012 = dplyr::first(log(NY.GDP.MKTP.CD), order_by = year), + NY.GDP.MKTP.CD_2012_unlogged = dplyr::first(NY.GDP.MKTP.CD, order_by = year) / 1e9, + NY.GDP.PCAP.CD_2012 = dplyr::first(log(NY.GDP.PCAP.CD), order_by = year), + SI.POV.GINI_2012 = dplyr::first(SI.POV.GINI, order_by = year), + SP.DYN.TFRT.IN_2012 = dplyr::first(SP.DYN.TFRT.IN, order_by = year), + Smartphone_tc = Smartphone - Smartphone_2012, + Internet_tc = Internet - Internet_2012, + SL.UEM.TOTL.ZS_tc = SL.UEM.TOTL.ZS - SL.UEM.TOTL.ZS_2012, + NY.GDP.MKTP.CD_tc = log(NY.GDP.MKTP.CD) - NY.GDP.MKTP.CD_2012, + NY.GDP.PCAP.CD_tc_unlogged = (NY.GDP.PCAP.CD / 1e9) - NY.GDP.MKTP.CD_2012_unlogged, + NY.GDP.PCAP.CD_tc = log(NY.GDP.PCAP.CD) - NY.GDP.PCAP.CD_2012, + SI.POV.GINI_tc = SI.POV.GINI - SI.POV.GINI_2012, + SP.DYN.TFRT.IN_tc = SP.DYN.TFRT.IN - SP.DYN.TFRT.IN_2012) %>% + ungroup() %>% + mutate(Smartphone_2012 = Smartphone_2012 - mean(Smartphone_2012), + Internet_2012 = Internet_2012 - mean(Internet_2012), + SL.UEM.TOTL.ZS_2012 = SL.UEM.TOTL.ZS_2012 - mean(SL.UEM.TOTL.ZS_2012), + NY.GDP.MKTP.CD_2012 = NY.GDP.MKTP.CD_2012 - mean(NY.GDP.MKTP.CD_2012), + NY.GDP.MKTP.CD_2012_unlogged = NY.GDP.MKTP.CD_2012_unlogged - mean(NY.GDP.MKTP.CD_2012_unlogged), + NY.GDP.PCAP.CD_2012 = NY.GDP.PCAP.CD_2012 - mean(NY.GDP.PCAP.CD_2012), + SI.POV.GINI_2012 = SI.POV.GINI_2012 - mean(SI.POV.GINI_2012), + SP.DYN.TFRT.IN_2012 = SP.DYN.TFRT.IN_2012 - mean(SP.DYN.TFRT.IN_2012)) + +``` + +We're going to run the model and look at the results. I've included the baseline means in the model, but given the number of observations (61), this is asking a lot of the data. For 64 observations, there's 11 predictors plus the random intercepts and slopes for year. This model is almost certainly overfit (though I think their original model is too). + +In the model below, I have also used the natural log of gross GDP, which makes more sense to me (so much as using gross GDP makes sense). + +```r + +> mod_sp_tc <- lmer(loneliness ~ 1 + Smartphone_tc + + year + + SL.UEM.TOTL.ZS_tc + + NY.GDP.MKTP.CD_tc + + SI.POV.GINI_tc + + SP.DYN.TFRT.IN_tc + + Internet_2012 + + SL.UEM.TOTL.ZS_2012 + + NY.GDP.MKTP.CD_2012 + + SI.POV.GINI_2012 + + SP.DYN.TFRT.IN_2012 + + (1 + year | cnt), + data = df) +> summary(mod_sp_tc) + +Linear mixed model fit by REML ['lmerMod'] +Formula: loneliness ~ 1 + Smartphone_tc + year + SL.UEM.TOTL.ZS_tc + NY.GDP.MKTP.CD_tc + + SI.POV.GINI_tc + SP.DYN.TFRT.IN_tc + Smartphone_2012 + SL.UEM.TOTL.ZS_2012 + + NY.GDP.MKTP.CD_2012 + SI.POV.GINI_2012 + SP.DYN.TFRT.IN_2012 + (1 + year | cnt) + Data: df + +REML criterion at convergence: -59.4 + +Scaled residuals: + Min 1Q Median 3Q Max +-1.54401 -0.39900 0.03901 0.40098 1.43279 + +Random effects: + Groups Name Variance Std.Dev. Corr + cnt (Intercept) 0.0135895 0.116574 + year 0.0000978 0.009889 -0.35 + Residual 0.0015830 0.039787 +Number of obs: 61, groups: cnt, 24 + +Fixed effects: + Estimate Std. Error t value +(Intercept) 1.794916 0.025806 69.554 +Smartphone_tc 0.001882 0.001317 1.429 +year 0.026335 0.006494 4.055 +SL.UEM.TOTL.ZS_tc -0.005489 0.006203 -0.885 +NY.GDP.MKTP.CD_tc -0.249820 0.100478 -2.486 +SI.POV.GINI_tc -0.004329 0.009862 -0.439 +SP.DYN.TFRT.IN_tc -0.087007 0.116167 -0.749 +Smartphone_2012 0.003587 0.002286 1.569 +SL.UEM.TOTL.ZS_2012 -0.008922 0.004819 -1.851 +NY.GDP.MKTP.CD_2012 -0.029471 0.018625 -1.582 +SI.POV.GINI_2012 0.010315 0.004443 2.322 +SP.DYN.TFRT.IN_2012 -0.079967 0.070667 -1.132 + +Correlation of Fixed Effects: + (Intr) Smrtp_ year SL.UEM.TOTL.ZS_t NY.GDP.MKTP.CD_t SI.POV.GINI_t SP.DYN.TFRT.IN_t +Smartphn_tc 0.044 +year -0.267 -0.781 +SL.UEM.TOTL.ZS_t -0.004 0.247 0.134 +NY.GDP.MKTP.CD_t 0.088 0.582 -0.414 0.594 +SI.POV.GINI_t -0.018 -0.076 -0.046 -0.570 -0.439 +SP.DYN.TFRT.IN_t -0.016 0.074 0.056 0.353 0.284 -0.287 +Smrtph_2012 -0.012 0.336 -0.305 0.033 0.159 -0.135 -0.045 +SL.UEM.TOTL.ZS_2 -0.013 -0.040 0.102 0.153 0.027 -0.075 -0.018 +NY.GDP.MKTP.CD_2 0.041 0.020 -0.065 -0.091 0.048 0.072 -0.024 +SI.POV.GINI_2 -0.015 0.211 -0.193 0.033 0.145 0.010 0.087 +SP.DYN.TFRT.IN_2 -0.076 -0.062 0.054 -0.070 -0.124 0.041 0.065 + S_2012 SL.UEM.TOTL.ZS_2 NY.GDP.MKTP.CD_2 SI.POV.GINI_2 +Smartphn_tc +year +SL.UEM.TOTL.ZS_t +NY.GDP.MKTP.CD_t +SI.POV.GINI_t +SP.DYN.TFRT.IN_t +Smrtph_2012 +SL.UEM.TOTL.ZS_2 0.275 +NY.GDP.MKTP.CD_2 -0.045 0.042 +SI.POV.GINI_2 0.072 -0.268 -0.293 +SP.DYN.TFRT.IN_2 0.095 0.413 0.015 -0.434 + +``` + +You can see now that within countries, smartphone access is no longer statistically significant , nor is it significant between countries (t-value < 1.96 for both). We can also see that the fixed effects are not correlated with the intercept, as the correlations are below 0.1. The results are substantively similar with group-mean centering. If you're curious about the difference, you can check out the code. + +We see a similar pattern with internet access: we get lower t-values when the predictor is split to account for within and between country effects. + +```r + +> mod_int_tc <- lmer(loneliness ~ 1 + Internet_tc + + year + + SL.UEM.TOTL.ZS_tc + + NY.GDP.MKTP.CD_tc + + SI.POV.GINI_tc + + SP.DYN.TFRT.IN_tc + + Internet_2012 + + SL.UEM.TOTL.ZS_2012 + + NY.GDP.MKTP.CD_2012 + + SI.POV.GINI_2012 + + SP.DYN.TFRT.IN_2012 + + (1 + year | cnt), + data = df) +> summary(mod_int_tc) + +Linear mixed model fit by REML ['lmerMod'] +Formula: loneliness ~ 1 + Internet_tc + year + SL.UEM.TOTL.ZS_tc + NY.GDP.MKTP.CD_tc + + SI.POV.GINI_tc + SP.DYN.TFRT.IN_tc + Internet_2012 + SL.UEM.TOTL.ZS_2012 + + NY.GDP.MKTP.CD_2012 + SI.POV.GINI_2012 + SP.DYN.TFRT.IN_2012 + (1 + year | cnt) + Data: df + +REML criterion at convergence: -72.8 + +Scaled residuals: + Min 1Q Median 3Q Max +-1.96459 -0.34791 -0.03333 0.37145 1.68167 + +Random effects: + Groups Name Variance Std.Dev. Corr + cnt (Intercept) 1.124e-02 0.10601 + year 7.691e-05 0.00877 -0.08 + Residual 1.730e-03 0.04159 +Number of obs: 61, groups: cnt, 24 + +Fixed effects: + Estimate Std. Error t value +(Intercept) 1.797110 0.024049 74.728 +Internet_tc 0.040006 0.035844 1.116 +year 0.025601 0.008544 2.996 +SL.UEM.TOTL.ZS_tc -0.006334 0.006083 -1.041 +NY.GDP.MKTP.CD_tc -0.302126 0.086721 -3.484 +SI.POV.GINI_tc -0.003565 0.010082 -0.354 +SP.DYN.TFRT.IN_tc -0.087549 0.117947 -0.742 +Internet_2012 0.090039 0.049641 1.814 +SL.UEM.TOTL.ZS_2012 -0.007012 0.004628 -1.515 +NY.GDP.MKTP.CD_2012 -0.016003 0.019074 -0.839 +SI.POV.GINI_2012 0.006421 0.004665 1.376 +SP.DYN.TFRT.IN_2012 -0.053932 0.070147 -0.769 + +Correlation of Fixed Effects: + (Intr) Intrn_ year SL.UEM.TOTL.ZS_t NY.GDP.MKTP.CD_t SI.POV.GINI_t SP.DYN.TFRT.IN_t +Internet_tc 0.128 +year -0.242 -0.883 +SL.UEM.TOTL.ZS_t -0.013 0.048 0.212 +NY.GDP.MKTP.CD_t 0.107 0.221 -0.164 0.566 +SI.POV.GINI_t -0.035 -0.056 -0.025 -0.576 -0.498 +SP.DYN.TFRT.IN_t -0.007 0.017 0.070 0.364 0.306 -0.307 +Intrnt_2012 0.059 0.300 -0.304 -0.007 0.086 -0.104 -0.001 +SL.UEM.TOTL.ZS_2 -0.009 -0.055 0.085 0.114 0.039 -0.059 0.007 +NY.GDP.MKTP.CD_2 0.031 -0.033 -0.003 -0.066 0.032 0.006 -0.016 +SI.POV.GINI_2 -0.012 0.090 -0.088 -0.009 0.029 0.052 0.045 +SP.DYN.TFRT.IN_2 -0.059 0.020 -0.022 -0.041 -0.071 0.012 0.037 + I_2012 SL.UEM.TOTL.ZS_2 NY.GDP.MKTP.CD_2 SI.POV.GINI_2 +Internet_tc +year +SL.UEM.TOTL.ZS_t +NY.GDP.MKTP.CD_t +SI.POV.GINI_t +SP.DYN.TFRT.IN_t +Intrnt_2012 +SL.UEM.TOTL.ZS_2 0.259 +NY.GDP.MKTP.CD_2 0.294 0.173 +SI.POV.GINI_2 -0.346 -0.371 -0.407 +SP.DYN.TFRT.IN_2 0.244 0.453 0.120 -0.488 + + +``` + +# But wait, what if we use per capita GDP? +Now it starts to get more interesting. I mentioned earlier that I think they use gross GDP as one of their predictors. Gross GDP is an odd choice because it does not properly adjust for population size. Using gross GDP, the country with a greater population would have higher GDP even if the countries had an equal GDP per capita. That is not the measure what we want to use. + +Think of it this way. Imagine we had two schools where, on average, students had the same scores. But to figure out which school has "smarter" students, we simply added up the scores of the students and used that as our total. Now imagine that the larger school has more students but a lower aerage test score. The greater number of students means that the lower-scoring school can have a higher gross score, even if the average student is less smart than the smaller school. + +Put simply, but using gross GDP, Twenge et al. are not using a predictor that measures what we want to adjust for, which is how well off the country is _per person_. + + +```r + +> mod_sp_tc2 <- lmer(loneliness ~ 1 + Smartphone_tc + + year + + SL.UEM.TOTL.ZS_tc + + NY.GDP.PCAP.CD_tc + + SI.POV.GINI_tc + + SP.DYN.TFRT.IN_tc + + Smartphone_2012 + + SL.UEM.TOTL.ZS_2012 + + NY.GDP.PCAP.CD_2012 + + SI.POV.GINI_2012 + + SP.DYN.TFRT.IN_2012 + + (1 + year | cnt), + data = df) +> summary(mod_sp_tc2) + +Linear mixed model fit by REML ['lmerMod'] +Formula: loneliness ~ 1 + Smartphone_tc + year + SL.UEM.TOTL.ZS_tc + NY.GDP.PCAP.CD_tc + + SI.POV.GINI_tc + SP.DYN.TFRT.IN_tc + Smartphone_2012 + SL.UEM.TOTL.ZS_2012 + + NY.GDP.PCAP.CD_2012 + SI.POV.GINI_2012 + SP.DYN.TFRT.IN_2012 + (1 + year | cnt) + Data: df + +REML criterion at convergence: -71.9 + +Scaled residuals: + Min 1Q Median 3Q Max +-1.78007 -0.43656 -0.02092 0.39519 1.40685 + +Random effects: + Groups Name Variance Std.Dev. Corr + cnt (Intercept) 6.641e-03 0.08150 + year 8.208e-05 0.00906 -0.11 + Residual 1.593e-03 0.03992 +Number of obs: 61, groups: cnt, 24 + +Fixed effects: + Estimate Std. Error t value +(Intercept) 1.794731 0.019156 93.692 +Smartphone_tc 0.001776 0.001271 1.398 +year 0.025929 0.006038 4.294 +SL.UEM.TOTL.ZS_tc -0.006048 0.006331 -0.955 +NY.GDP.PCAP.CD_tc -0.270802 0.098602 -2.746 +SI.POV.GINI_tc -0.002465 0.009726 -0.253 +SP.DYN.TFRT.IN_tc -0.066107 0.113767 -0.581 +Smartphone_2012 0.005225 0.001838 2.844 +SL.UEM.TOTL.ZS_2012 -0.002432 0.003800 -0.640 +NY.GDP.PCAP.CD_2012 -0.140300 0.033194 -4.227 +SI.POV.GINI_2012 -0.005088 0.004498 -1.131 +SP.DYN.TFRT.IN_2012 0.026188 0.058734 0.446 + +Correlation of Fixed Effects: + (Intr) Smrtp_ year SL.UEM.TOTL.ZS_t NY.GDP.PCAP.CD_t SI.POV.GINI_t SP.DYN.TFRT.IN_t +Smartphn_tc 0.045 +year -0.243 -0.751 +SL.UEM.TOTL.ZS_t -0.009 0.266 0.174 +NY.GDP.PCAP.CD_t 0.095 0.552 -0.310 0.638 +SI.POV.GINI_t -0.023 -0.047 -0.108 -0.570 -0.435 +SP.DYN.TFRT.IN_t -0.019 0.050 0.103 0.345 0.252 -0.280 +Smrtph_2012 0.019 0.322 -0.315 0.014 0.114 -0.062 -0.038 +SL.UEM.TOTL.ZS_2 -0.022 -0.040 0.090 0.111 -0.013 -0.057 -0.004 +NY.GDP.PCAP.CD_2 0.003 -0.045 0.029 -0.035 0.027 -0.016 -0.028 +SI.POV.GINI_2 0.014 0.128 -0.142 -0.027 0.117 0.023 0.019 +SP.DYN.TFRT.IN_2 -0.067 -0.013 0.008 -0.036 -0.104 0.032 0.055 + S_2012 SL.UEM.TOTL.ZS_2 NY.GDP.PCAP.CD_2 SI.POV.GINI_2 +Smartphn_tc +year +SL.UEM.TOTL.ZS_t +NY.GDP.PCAP.CD_t +SI.POV.GINI_t +SP.DYN.TFRT.IN_t +Smrtph_2012 +SL.UEM.TOTL.ZS_2 0.334 +NY.GDP.PCAP.CD_2 -0.306 -0.278 +SI.POV.GINI_2 -0.153 -0.380 0.687 +SP.DYN.TFRT.IN_2 0.218 0.487 -0.403 -0.568 + +``` + +In this model, we can see that within countries, smartphone access is not a stastically significant predictor of loneliness. But differences between countries' rates of smartphone access in 2012 is statistically significant predictor. So, had they used this model, they might have been able to use this result to strengthen their case that smartphone access is associated with loneliness, but only between countries, not within countries. + +But what if we look at both internet use __and__ smartphone access? + +```r + +> mod_sp_tc3 <- lmer(loneliness ~ 1 + Smartphone_tc + + Internet_tc + + year + + SL.UEM.TOTL.ZS_tc + + NY.GDP.PCAP.CD_tc + + SI.POV.GINI_tc + + SP.DYN.TFRT.IN_tc + + Smartphone_2012 + + Internet_2012 + + SL.UEM.TOTL.ZS_2012 + + NY.GDP.PCAP.CD_2012 + + SI.POV.GINI_2012 + + SP.DYN.TFRT.IN_2012 + + (1 + year | cnt), + data = df) +> summary(mod_sp_tc3) + +Linear mixed model fit by REML ['lmerMod'] +Formula: loneliness ~ 1 + Smartphone_tc + Internet_tc + year + SL.UEM.TOTL.ZS_tc + + NY.GDP.PCAP.CD_tc + SI.POV.GINI_tc + SP.DYN.TFRT.IN_tc + + Smartphone_2012 + Internet_2012 + SL.UEM.TOTL.ZS_2012 + NY.GDP.PCAP.CD_2012 + + SI.POV.GINI_2012 + SP.DYN.TFRT.IN_2012 + (1 + year | cnt) + Data: df + +REML criterion at convergence: -63.9 + +Scaled residuals: + Min 1Q Median 3Q Max +-1.72288 -0.40690 -0.07131 0.37473 1.41784 + +Random effects: + Groups Name Variance Std.Dev. Corr + cnt (Intercept) 6.967e-03 0.083470 + year 9.413e-05 0.009702 -0.10 + Residual 1.532e-03 0.039136 +Number of obs: 61, groups: cnt, 24 + +Fixed effects: + Estimate Std. Error t value +(Intercept) 1.797047 0.019667 91.373 +Smartphone_tc 0.001593 0.001344 1.185 +Internet_tc 0.025369 0.036619 0.693 +year 0.021199 0.008644 2.453 +SL.UEM.TOTL.ZS_tc -0.006155 0.006376 -0.965 +NY.GDP.PCAP.CD_tc -0.265332 0.099032 -2.679 +SI.POV.GINI_tc -0.003345 0.009856 -0.339 +SP.DYN.TFRT.IN_tc -0.067687 0.114965 -0.589 +Smartphone_2012 0.004146 0.002287 1.813 +Internet_2012 0.046150 0.047559 0.970 +SL.UEM.TOTL.ZS_2012 -0.002412 0.003883 -0.621 +NY.GDP.PCAP.CD_2012 -0.131473 0.036442 -3.608 +SI.POV.GINI_2012 -0.005148 0.004596 -1.120 +SP.DYN.TFRT.IN_2012 0.031158 0.060145 0.518 + +Correlation matrix not shown by default, as p = 14 > 12. +Use print(x, correlation=TRUE) or + vcov(x) if you need it + +``` + +Our model now has nearly as many predictors and random effects as there are observations. But we can see that both smartphone access and internet usage are no longer statistically significant. + + +# Final thoughts +Twenge et al.'s mistake is common. The main multilevel modelling textbooks barely cover it (e.g., Snjiders & Bosker, 2011; Raudenbush & Bryk, 2002). They mention it briefly, and then rarely make use of it the rest of the book. + +To be clear, I don't think that Twenge et al.'s model (or mine in this post) is appropriate for what they are trying to measure. There's too few observations, too many preditors, and variables that don't make sense (like gross GDP). By aggregating their data, they have a study that is underpowered and noisy. + + +# References +Below are a few references I've found helpful in using mixed effects models to model longitudinal data. In particular, I recommend Lesa Hoffman's _Longitudinal analysis: Modeling within-person fluctuation and change_. To understand group-mean centering, I also recommend the articles by Bell and coauthors. + + +## Centering +Bell, A., Fairbrother, M., & Jones, K. (2019). Fixed and random effects models: making an informed choice. _Quality & Quantity_, _53_(2), 1051-1074. + +Bell, A., & Jones, K. (2015). Explaining fixed effects: Random effects modeling of time-series cross-sectional and panel data. _Political Science Research and Methods_, _3_(1), 133-153. + +Bell, A., Jones, K., & Fairbrother, M. (2018). Understanding and misunderstanding group mean centering: a commentary on Kelley et al.’s dangerous practice. _Quality & quantity_, _52_(5), 2031-2036. + +Enders, C. K. & Tofighi, D. (2007). Centering Predictor Variables in Cross-Sectional Multilevel Models: A New Look at an Old Issue. _Psychological Methods_, _12_(2). 121-138 + +Hamaker, E. L., & Grasman, R. P. (2015). To center or not to center? Investigating inertia with a multilevel autoregressive model. _Frontiers in psychology_, _5_, 1492. + +Hamaker, E. L., & Muthén, B. (2020). The fixed versus random effects debate and how it relates to centering in multilevel modeling. _Psychological methods_, _25_(3), 365. + +Hoffman, L. (2015). _Longitudinal analysis: Modeling within-person fluctuation and change_. Routledge. + +Raudenbush, S. W., & Bryk, A. S. (2002). _Hierarchical linear models: Applications and data analysis methods_. sage. + +Snijders, T. A., & Bosker, R. J. (2011). _Multilevel analysis: An introduction to basic and advanced multilevel modeling_. sage. + + +## Twenge et al. +Twenge, J. M., Haidt, J., Blake, A. B., McAllister, C., Lemon, H., & Le Roy, A. (2021). Worldwide increases in adolescent loneliness. _Journal of Adolescence_. diff --git a/_sass/minima/_base.scss b/_sass/minima/_base.scss new file mode 100644 index 0000000..a6f104e --- /dev/null +++ b/_sass/minima/_base.scss @@ -0,0 +1,282 @@ +html { + font-size: $base-font-size; +} + +/** + * Reset some basic elements + */ +body, h1, h2, h3, h4, h5, h6, +p, blockquote, pre, hr, +dl, dd, ol, ul, figure { + margin: 0; + padding: 0; + +} + + + +/** + * Basic styling + */ +body { + font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family; + color: $text-color; + background-color: $background-color; + -webkit-text-size-adjust: 100%; + -webkit-font-feature-settings: "kern" 1; + -moz-font-feature-settings: "kern" 1; + -o-font-feature-settings: "kern" 1; + font-feature-settings: "kern" 1; + font-kerning: normal; + display: flex; + min-height: 100vh; + flex-direction: column; + overflow-wrap: break-word; +} + + + +/** + * Set `margin-bottom` to maintain vertical rhythm + */ +h1, h2, h3, h4, h5, h6, +p, blockquote, pre, +ul, ol, dl, figure, +%vertical-rhythm { + margin-bottom: $spacing-unit / 2; +} + +hr { + margin-top: $spacing-unit; + margin-bottom: $spacing-unit; +} + +/** + * `main` element + */ +main { + display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */ +} + + + +/** + * Images + */ +img { + max-width: 100%; + vertical-align: middle; +} + + + +/** + * Figures + */ +figure > img { + display: block; +} + +figcaption { + font-size: $small-font-size; +} + + + +/** + * Lists + */ +ul, ol { + margin-left: $spacing-unit; +} + +li { + > ul, + > ol { + margin-bottom: 0; + } +} + + + +/** + * Headings + */ +h1, h2, h3, h4, h5, h6 { + font-weight: $base-font-weight; +} + + + +/** + * Links + */ +a { + color: $link-base-color; + text-decoration: none; + + &:visited { + color: $link-visited-color; + } + + &:hover { + color: $link-hover-color; + text-decoration: underline; + } + + .social-media-list &:hover { + text-decoration: none; + + .username { + text-decoration: underline; + } + } +} + + +/** + * Blockquotes + */ +blockquote { + color: $brand-color; + border-left: 4px solid $border-color-01; + padding-left: $spacing-unit / 2; + @include relative-font-size(1.125); + font-style: italic; + + > :last-child { + margin-bottom: 0; + } + + i, em { + font-style: normal; + } +} + + + +/** + * Code formatting + */ +pre, +code { + font-family: $code-font-family; + font-size: 0.9375em; + border: 1px solid $border-color-01; + border-radius: 3px; + background-color: $code-background-color; +} + +code { + padding: 1px 5px; +} + +pre { + padding: 8px 12px; + overflow-x: auto; + + > code { + border: 0; + padding-right: 0; + padding-left: 0; + } +} + +.highlight { + border-radius: 3px; + background: $code-background-color; + @extend %vertical-rhythm; + + .highlighter-rouge & { + background: $code-background-color; + } +} + + + +/** + * Wrapper + */ +.wrapper { + max-width: calc(#{$content-width} - (#{$spacing-unit})); + margin-right: auto; + margin-left: auto; + padding-right: $spacing-unit / 2; + padding-left: $spacing-unit / 2; + @extend %clearfix; + + @media screen and (min-width: $on-large) { + max-width: calc(#{$content-width} - (#{$spacing-unit} * 2)); + padding-right: $spacing-unit; + padding-left: $spacing-unit; + } +} + + + +/** + * Clearfix + */ +%clearfix:after { + content: ""; + display: table; + clear: both; +} + + + +/** + * Icons + */ + +.orange { + color: #f66a0a; +} + +.grey { + color: #828282; +} + +.svg-icon { + width: 16px; + height: 16px; + display: inline-block; + fill: currentColor; + padding: 5px 3px 2px 5px; + vertical-align: text-bottom; +} + + +/** + * Tables + */ +table { + margin-bottom: $spacing-unit; + width: 100%; + text-align: $table-text-align; + color: $table-text-color; + border-collapse: collapse; + border: 1px solid $table-border-color; + tr { + &:nth-child(even) { + background-color: $table-zebra-color; + } + } + th, td { + padding: ($spacing-unit / 3) ($spacing-unit / 2); + } + th { + background-color: $table-header-bg-color; + border: 1px solid $table-header-border; + } + td { + border: 1px solid $table-border-color; + } + + @include media-query($on-laptop) { + display: block; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } +} diff --git a/_sass/minima/_layout.scss b/_sass/minima/_layout.scss new file mode 100644 index 0000000..40d2cd1 --- /dev/null +++ b/_sass/minima/_layout.scss @@ -0,0 +1,342 @@ +/** + * Site header + */ +.site-header { + border-top: 5px solid $border-color-03; + border-bottom: 1px solid $border-color-01; + min-height: $spacing-unit * 1.865; + line-height: $base-line-height * $base-font-size * 2.25; + + // Positioning context for the mobile navigation icon + position: relative; +} + +.site-title { + @include relative-font-size(1.625); + font-weight: 300; + letter-spacing: -1px; + margin-bottom: 0; + float: left; + + @include media-query($on-palm) { + padding-right: 45px; + } + + &, + &:visited { + color: $site-title-color; + } +} + +.site-nav { + position: absolute; + top: 9px; + right: $spacing-unit / 2; + background-color: $background-color; + border: 1px solid $border-color-01; + border-radius: 5px; + text-align: right; + + .nav-trigger { + display: none; + } + + .menu-icon { + float: right; + width: 36px; + height: 26px; + line-height: 0; + padding-top: 10px; + text-align: center; + + > svg path { + fill: $border-color-03; + } + } + + label[for="nav-trigger"] { + display: block; + float: right; + width: 36px; + height: 36px; + z-index: 2; + cursor: pointer; + } + + input ~ .trigger { + clear: both; + display: none; + } + + input:checked ~ .trigger { + display: block; + padding-bottom: 5px; + } + + .page-link { + color: $text-color; + line-height: $base-line-height; + display: block; + padding: 5px 10px; + + // Gaps between nav items, but not on the last one + &:not(:last-child) { + margin-right: 0; + } + margin-left: 20px; + } + + @media screen and (min-width: $on-medium) { + position: static; + float: right; + border: none; + background-color: inherit; + + label[for="nav-trigger"] { + display: none; + } + + .menu-icon { + display: none; + } + + input ~ .trigger { + display: block; + } + + .page-link { + display: inline; + padding: 0; + + &:not(:last-child) { + margin-right: 20px; + } + margin-left: auto; + } + } +} + + + +/** + * Site footer + */ +.site-footer { + border-top: 1px solid $border-color-01; + padding: $spacing-unit 0; +} + +.footer-heading { + @include relative-font-size(1.125); + margin-bottom: $spacing-unit / 2; +} + +.feed-subscribe .svg-icon { + padding: 5px 5px 2px 0 +} + +.contact-list, +.social-media-list { + list-style: none; + margin-left: 0; +} + +.footer-col-wrapper, +.social-links { + @include relative-font-size(0.9375); + color: $brand-color; +} + +.footer-col { + margin-bottom: $spacing-unit / 2; +} + +.footer-col-1, +.footer-col-2 { + width: calc(50% - (#{$spacing-unit} / 2)); +} + +.footer-col-3 { + width: calc(100% - (#{$spacing-unit} / 2)); +} + +@media screen and (min-width: $on-large) { + .footer-col-1 { + width: calc(35% - (#{$spacing-unit} / 2)); + } + + .footer-col-2 { + width: calc(20% - (#{$spacing-unit} / 2)); + } + + .footer-col-3 { + width: calc(45% - (#{$spacing-unit} / 2)); + } +} + +@media screen and (min-width: $on-medium) { + .footer-col-wrapper { + display: flex + } + + .footer-col { + width: calc(100% - (#{$spacing-unit} / 2)); + padding: 0 ($spacing-unit / 2); + + &:first-child { + padding-right: $spacing-unit / 2; + padding-left: 0; + } + + &:last-child { + padding-right: 0; + padding-left: $spacing-unit / 2; + } + } +} + + + +/** + * Page content + */ +.page-content { + padding: $spacing-unit 0; + flex: 1 0 auto; +} + +.page-heading { + @include relative-font-size(2); +} + +.post-list-heading { + @include relative-font-size(1.75); +} + +.post-list { + margin-left: 0; + list-style: none; + + > li { + margin-bottom: $spacing-unit; + } +} + +.post-meta { + font-size: $small-font-size; + color: $brand-color; +} + +.post-link { + display: block; + @include relative-font-size(1.5); +} + + + +/** + * Posts + */ +.post-header { + margin-bottom: $spacing-unit; +} + +.post-title, +.post-content h1 { + @include relative-font-size(2.625); + letter-spacing: -1px; + line-height: 1.15; + + @media screen and (min-width: $on-large) { + @include relative-font-size(2.625); + } +} + +.post-content { + margin-bottom: $spacing-unit; + + h1, h2, h3 { margin-top: $spacing-unit * 2 } + h4, h5, h6 { margin-top: $spacing-unit } + + h2 { + @include relative-font-size(1.75); + + @media screen and (min-width: $on-large) { + @include relative-font-size(2); + } + } + + h3 { + @include relative-font-size(1.375); + + @media screen and (min-width: $on-large) { + @include relative-font-size(1.625); + } + } + + h4 { + @include relative-font-size(1.25); + } + + h5 { + @include relative-font-size(1.125); + } + h6 { + @include relative-font-size(1.0625); + } +} + + +.social-media-list { + display: table; + margin: 0 auto; + li { + float: left; + margin: 5px 10px 5px 0; + &:last-of-type { margin-right: 0 } + a { + display: block; + padding: $spacing-unit / 4; + border: 1px solid $border-color-01; + &:hover { border-color: $border-color-02 } + } + } +} + + + +/** + * Pagination navbar + */ +.pagination { + margin-bottom: $spacing-unit; + @extend .social-media-list; + li { + a, div { + min-width: 41px; + text-align: center; + box-sizing: border-box; + } + div { + display: block; + padding: $spacing-unit / 4; + border: 1px solid transparent; + + &.pager-edge { + color: $border-color-01; + border: 1px dashed; + } + } + } +} + + + +/** + * Grid helpers + */ +@media screen and (min-width: $on-large) { + .one-half { + width: calc(50% - (#{$spacing-unit} / 2)); + } +} diff --git a/_sass/minima/custom-styles.scss b/_sass/minima/custom-styles.scss new file mode 100644 index 0000000..7c1417f --- /dev/null +++ b/_sass/minima/custom-styles.scss @@ -0,0 +1,2 @@ +// Placeholder to allow defining custom styles that override everything else. +// (Use `_sass/minima/custom-variables.scss` to override variable defaults) diff --git a/_sass/minima/custom-variables.scss b/_sass/minima/custom-variables.scss new file mode 100644 index 0000000..2a2d0fa --- /dev/null +++ b/_sass/minima/custom-variables.scss @@ -0,0 +1 @@ +// Placeholder to allow overriding predefined variables smoothly. diff --git a/_sass/minima/initialize.scss b/_sass/minima/initialize.scss new file mode 100644 index 0000000..ab55458 --- /dev/null +++ b/_sass/minima/initialize.scss @@ -0,0 +1,50 @@ +@charset "utf-8"; + +// Define defaults for each variable. + +$base-font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Segoe UI Symbol", "Segoe UI Emoji", "Apple Color Emoji", Roboto, Helvetica, Arial, sans-serif !default; +$code-font-family: "Menlo", "Inconsolata", "Consolas", "Roboto Mono", "Ubuntu Mono", "Liberation Mono", "Courier New", monospace; +$base-font-size: 16px !default; +$base-font-weight: 400 !default; +$small-font-size: $base-font-size * 0.875 !default; +$base-line-height: 1.5 !default; + +$spacing-unit: 30px !default; + +$table-text-align: left !default; + +// Width of the content area +$content-width: 800px !default; + +$on-palm: 600px !default; +$on-laptop: 800px !default; + +$on-medium: $on-palm !default; +$on-large: $on-laptop !default; + +// Use media queries like this: +// @include media-query($on-palm) { +// .wrapper { +// padding-right: $spacing-unit / 2; +// padding-left: $spacing-unit / 2; +// } +// } +// Notice the following mixin uses max-width, in a deprecated, desktop-first +// approach, whereas media queries used elsewhere now use min-width. +@mixin media-query($device) { + @media screen and (max-width: $device) { + @content; + } +} + +@mixin relative-font-size($ratio) { + font-size: #{$ratio}rem; +} + +// Import pre-styling-overrides hook and style-partials. +@import + "minima/custom-variables", // Hook to override predefined variables. + "minima/base", // Defines element resets. + "minima/layout", // Defines structure and style based on CSS selectors. + "minima/custom-styles" // Hook to override existing styles. +; diff --git a/_sass/minima/skins/classic.scss b/_sass/minima/skins/classic.scss new file mode 100644 index 0000000..c6dc292 --- /dev/null +++ b/_sass/minima/skins/classic.scss @@ -0,0 +1,91 @@ +@charset "utf-8"; + +$brand-color: #828282 !default; +$brand-color-light: lighten($brand-color, 40%) !default; +$brand-color-dark: darken($brand-color, 25%) !default; + +$site-title-color: $brand-color-dark !default; + +$text-color: #111111 !default; +$background-color: #fdfdfd !default; +$code-background-color: #eeeeff !default; + +$link-base-color: #2a7ae2 !default; +$link-visited-color: darken($link-base-color, 15%) !default; +$link-hover-color: $text-color !default; + +$border-color-01: $brand-color-light !default; +$border-color-02: lighten($brand-color, 35%) !default; +$border-color-03: $brand-color-dark !default; + +$table-text-color: lighten($text-color, 18%) !default; +$table-zebra-color: lighten($brand-color, 46%) !default; +$table-header-bg-color: lighten($brand-color, 43%) !default; +$table-header-border: lighten($brand-color, 37%) !default; +$table-border-color: $border-color-01 !default; + + +// Syntax highlighting styles should be adjusted appropriately for every "skin" +// ---------------------------------------------------------------------------- + +.highlight { + .c { color: #998; font-style: italic } // Comment + .err { color: #a61717; background-color: #e3d2d2 } // Error + .k { font-weight: bold } // Keyword + .o { font-weight: bold } // Operator + .cm { color: #998; font-style: italic } // Comment.Multiline + .cp { color: #999; font-weight: bold } // Comment.Preproc + .c1 { color: #998; font-style: italic } // Comment.Single + .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special + .gd { color: #000; background-color: #fdd } // Generic.Deleted + .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific + .ge { font-style: italic } // Generic.Emph + .gr { color: #a00 } // Generic.Error + .gh { color: #999 } // Generic.Heading + .gi { color: #000; background-color: #dfd } // Generic.Inserted + .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific + .go { color: #888 } // Generic.Output + .gp { color: #555 } // Generic.Prompt + .gs { font-weight: bold } // Generic.Strong + .gu { color: #aaa } // Generic.Subheading + .gt { color: #a00 } // Generic.Traceback + .kc { font-weight: bold } // Keyword.Constant + .kd { font-weight: bold } // Keyword.Declaration + .kp { font-weight: bold } // Keyword.Pseudo + .kr { font-weight: bold } // Keyword.Reserved + .kt { color: #458; font-weight: bold } // Keyword.Type + .m { color: #099 } // Literal.Number + .s { color: #d14 } // Literal.String + .na { color: #008080 } // Name.Attribute + .nb { color: #0086B3 } // Name.Builtin + .nc { color: #458; font-weight: bold } // Name.Class + .no { color: #008080 } // Name.Constant + .ni { color: #800080 } // Name.Entity + .ne { color: #900; font-weight: bold } // Name.Exception + .nf { color: #900; font-weight: bold } // Name.Function + .nn { color: #555 } // Name.Namespace + .nt { color: #000080 } // Name.Tag + .nv { color: #008080 } // Name.Variable + .ow { font-weight: bold } // Operator.Word + .w { color: #bbb } // Text.Whitespace + .mf { color: #099 } // Literal.Number.Float + .mh { color: #099 } // Literal.Number.Hex + .mi { color: #099 } // Literal.Number.Integer + .mo { color: #099 } // Literal.Number.Oct + .sb { color: #d14 } // Literal.String.Backtick + .sc { color: #d14 } // Literal.String.Char + .sd { color: #d14 } // Literal.String.Doc + .s2 { color: #d14 } // Literal.String.Double + .se { color: #d14 } // Literal.String.Escape + .sh { color: #d14 } // Literal.String.Heredoc + .si { color: #d14 } // Literal.String.Interpol + .sx { color: #d14 } // Literal.String.Other + .sr { color: #009926 } // Literal.String.Regex + .s1 { color: #d14 } // Literal.String.Single + .ss { color: #990073 } // Literal.String.Symbol + .bp { color: #999 } // Name.Builtin.Pseudo + .vc { color: #008080 } // Name.Variable.Class + .vg { color: #008080 } // Name.Variable.Global + .vi { color: #008080 } // Name.Variable.Instance + .il { color: #099 } // Literal.Number.Integer.Long +} diff --git a/_sass/minima/skins/dark.scss b/_sass/minima/skins/dark.scss new file mode 100644 index 0000000..39b893f --- /dev/null +++ b/_sass/minima/skins/dark.scss @@ -0,0 +1,95 @@ +@charset "utf-8"; + +$brand-color: #999999 !default; +$brand-color-light: lighten($brand-color, 5%) !default; +$brand-color-dark: darken($brand-color, 35%) !default; + +$site-title-color: $brand-color-light !default; + +$text-color: #bbbbbb !default; +$background-color: #181818 !default; +$code-background-color: #212121 !default; + +$link-base-color: #79b8ff !default; +$link-visited-color: $link-base-color !default; +$link-hover-color: $text-color !default; + +$border-color-01: $brand-color-dark !default; +$border-color-02: $brand-color-light !default; +$border-color-03: $brand-color !default; + +$table-text-color: $text-color !default; +$table-zebra-color: lighten($background-color, 4%) !default; +$table-header-bg-color: lighten($background-color, 10%) !default; +$table-header-border: lighten($background-color, 21%) !default; +$table-border-color: $border-color-01 !default; + + +// Syntax highlighting styles should be adjusted appropriately for every "skin" +// List of tokens: https://github.com/rouge-ruby/rouge/wiki/List-of-tokens +// Some colors come from Material Theme Darker: +// https://github.com/material-theme/vsc-material-theme/blob/master/scripts/generator/settings/specific/darker-hc.ts +// https://github.com/material-theme/vsc-material-theme/blob/master/scripts/generator/color-set.ts +// ---------------------------------------------------------------------------- + +.highlight { + .c { color: #545454; font-style: italic } // Comment + .err { color: #f07178; background-color: #e3d2d2 } // Error + .k { color: #89DDFF; font-weight: bold } // Keyword + .o { font-weight: bold } // Operator + .cm { color: #545454; font-style: italic } // Comment.Multiline + .cp { color: #545454; font-weight: bold } // Comment.Preproc + .c1 { color: #545454; font-style: italic } // Comment.Single + .cs { color: #545454; font-weight: bold; font-style: italic } // Comment.Special + .gd { color: #000; background-color: #fdd } // Generic.Deleted + .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific + .ge { font-style: italic } // Generic.Emph + .gr { color: #f07178 } // Generic.Error + .gh { color: #999 } // Generic.Heading + .gi { color: #000; background-color: #dfd } // Generic.Inserted + .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific + .go { color: #888 } // Generic.Output + .gp { color: #555 } // Generic.Prompt + .gs { font-weight: bold } // Generic.Strong + .gu { color: #aaa } // Generic.Subheading + .gt { color: #f07178 } // Generic.Traceback + .kc { font-weight: bold } // Keyword.Constant + .kd { font-weight: bold } // Keyword.Declaration + .kp { font-weight: bold } // Keyword.Pseudo + .kr { font-weight: bold } // Keyword.Reserved + .kt { color: #FFCB6B; font-weight: bold } // Keyword.Type + .m { color: #F78C6C } // Literal.Number + .s { color: #C3E88D } // Literal.String + .na { color: #008080 } // Name.Attribute + .nb { color: #EEFFFF } // Name.Builtin + .nc { color: #FFCB6B; font-weight: bold } // Name.Class + .no { color: #008080 } // Name.Constant + .ni { color: #800080 } // Name.Entity + .ne { color: #900; font-weight: bold } // Name.Exception + .nf { color: #82AAFF; font-weight: bold } // Name.Function + .nn { color: #555 } // Name.Namespace + .nt { color: #FFCB6B } // Name.Tag + .nv { color: #EEFFFF } // Name.Variable + .ow { font-weight: bold } // Operator.Word + .w { color: #EEFFFF } // Text.Whitespace + .mf { color: #F78C6C } // Literal.Number.Float + .mh { color: #F78C6C } // Literal.Number.Hex + .mi { color: #F78C6C } // Literal.Number.Integer + .mo { color: #F78C6C } // Literal.Number.Oct + .sb { color: #C3E88D } // Literal.String.Backtick + .sc { color: #C3E88D } // Literal.String.Char + .sd { color: #C3E88D } // Literal.String.Doc + .s2 { color: #C3E88D } // Literal.String.Double + .se { color: #EEFFFF } // Literal.String.Escape + .sh { color: #C3E88D } // Literal.String.Heredoc + .si { color: #C3E88D } // Literal.String.Interpol + .sx { color: #C3E88D } // Literal.String.Other + .sr { color: #C3E88D } // Literal.String.Regex + .s1 { color: #C3E88D } // Literal.String.Single + .ss { color: #C3E88D } // Literal.String.Symbol + .bp { color: #999 } // Name.Builtin.Pseudo + .vc { color: #FFCB6B } // Name.Variable.Class + .vg { color: #EEFFFF } // Name.Variable.Global + .vi { color: #EEFFFF } // Name.Variable.Instance + .il { color: #F78C6C } // Literal.Number.Integer.Long +} diff --git a/_sass/minima/skins/solarized-dark.scss b/_sass/minima/skins/solarized-dark.scss new file mode 100644 index 0000000..f3b1f38 --- /dev/null +++ b/_sass/minima/skins/solarized-dark.scss @@ -0,0 +1,4 @@ +@charset "utf-8"; + +$sol-is-dark: true; +@import "minima/skins/solarized"; diff --git a/_sass/minima/skins/solarized.scss b/_sass/minima/skins/solarized.scss new file mode 100644 index 0000000..6253d69 --- /dev/null +++ b/_sass/minima/skins/solarized.scss @@ -0,0 +1,140 @@ +@charset "utf-8"; + +// Solarized skin +// ============== +// Created by Sander Voerman using the Solarized +// color scheme by Ethan Schoonover . + +// This style sheet implements two options for the minima.skin setting: +// "solarized" for light mode and "solarized-dark" for dark mode. +$sol-is-dark: false !default; + + +// Color scheme +// ------------ +// The inline comments show the canonical L*a*b values for each color. + +$sol-base03: #002b36; // 15 -12 -12 +$sol-base02: #073642; // 20 -12 -12 +$sol-base01: #586e75; // 45 -07 -07 +$sol-base00: #657b83; // 50 -07 -07 +$sol-base0: #839496; // 60 -06 -03 +$sol-base1: #93a1a1; // 65 -05 -02 +$sol-base2: #eee8d5; // 92 -00 10 +$sol-base3: #fdf6e3; // 97 00 10 +$sol-yellow: #b58900; // 60 10 65 +$sol-orange: #cb4b16; // 50 50 55 +$sol-red: #dc322f; // 50 65 45 +$sol-magenta: #d33682; // 50 65 -05 +$sol-violet: #6c71c4; // 50 15 -45 +$sol-blue: #268bd2; // 55 -10 -45 +$sol-cyan: #2aa198; // 60 -35 -05 +$sol-green: #859900; // 60 -20 65 + +$sol-mono3: $sol-base3; +$sol-mono2: $sol-base2; +$sol-mono1: $sol-base1; +$sol-mono00: $sol-base00; +$sol-mono01: $sol-base01; + +@if $sol-is-dark { + $sol-mono3: $sol-base03; + $sol-mono2: $sol-base02; + $sol-mono1: $sol-base01; + $sol-mono00: $sol-base0; + $sol-mono01: $sol-base1; +} + + +// Minima color variables +// ---------------------- + +$brand-color: $sol-mono1 !default; +$brand-color-light: mix($sol-mono1, $sol-mono3) !default; +$brand-color-dark: $sol-mono00 !default; + +$site-title-color: $sol-mono00 !default; + +$text-color: $sol-mono01 !default; +$background-color: $sol-mono3 !default; +$code-background-color: $sol-mono2 !default; + +$link-base-color: $sol-blue !default; +$link-visited-color: mix($sol-blue, $sol-mono00) !default; +$link-hover-color: $sol-mono00 !default; + +$border-color-01: $brand-color-light !default; +$border-color-02: $sol-mono1 !default; +$border-color-03: $sol-mono00 !default; + +$table-text-color: $sol-mono00 !default; +$table-zebra-color: mix($sol-mono2, $sol-mono3) !default; +$table-header-bg-color: $sol-mono2 !default; +$table-header-border: $sol-mono1 !default; +$table-border-color: $sol-mono1 !default; + + +// Syntax highlighting styles +// -------------------------- + +.highlight { + .c { color: $sol-mono1; font-style: italic } // Comment + .err { color: $sol-red } // Error + .k { color: $sol-mono01; font-weight: bold } // Keyword + .o { color: $sol-mono01; font-weight: bold } // Operator + .cm { color: $sol-mono1; font-style: italic } // Comment.Multiline + .cp { color: $sol-mono1; font-weight: bold } // Comment.Preproc + .c1 { color: $sol-mono1; font-style: italic } // Comment.Single + .cs { color: $sol-mono1; font-weight: bold; font-style: italic } // Comment.Special + .gd { color: $sol-red } // Generic.Deleted + .gd .x { color: $sol-red } // Generic.Deleted.Specific + .ge { color: $sol-mono00; font-style: italic } // Generic.Emph + .gr { color: $sol-red } // Generic.Error + .gh { color: $sol-mono1 } // Generic.Heading + .gi { color: $sol-green } // Generic.Inserted + .gi .x { color: $sol-green } // Generic.Inserted.Specific + .go { color: $sol-mono00 } // Generic.Output + .gp { color: $sol-mono00 } // Generic.Prompt + .gs { color: $sol-mono01; font-weight: bold } // Generic.Strong + .gu { color: $sol-mono1 } // Generic.Subheading + .gt { color: $sol-red } // Generic.Traceback + .kc { color: $sol-mono01; font-weight: bold } // Keyword.Constant + .kd { color: $sol-mono01; font-weight: bold } // Keyword.Declaration + .kp { color: $sol-mono01; font-weight: bold } // Keyword.Pseudo + .kr { color: $sol-mono01; font-weight: bold } // Keyword.Reserved + .kt { color: $sol-violet; font-weight: bold } // Keyword.Type + .m { color: $sol-cyan } // Literal.Number + .s { color: $sol-magenta } // Literal.String + .na { color: $sol-cyan } // Name.Attribute + .nb { color: $sol-blue } // Name.Builtin + .nc { color: $sol-violet; font-weight: bold } // Name.Class + .no { color: $sol-cyan } // Name.Constant + .ni { color: $sol-violet } // Name.Entity + .ne { color: $sol-violet; font-weight: bold } // Name.Exception + .nf { color: $sol-blue; font-weight: bold } // Name.Function + .nn { color: $sol-mono00 } // Name.Namespace + .nt { color: $sol-blue } // Name.Tag + .nv { color: $sol-cyan } // Name.Variable + .ow { color: $sol-mono01; font-weight: bold } // Operator.Word + .w { color: $sol-mono1 } // Text.Whitespace + .mf { color: $sol-cyan } // Literal.Number.Float + .mh { color: $sol-cyan } // Literal.Number.Hex + .mi { color: $sol-cyan } // Literal.Number.Integer + .mo { color: $sol-cyan } // Literal.Number.Oct + .sb { color: $sol-magenta } // Literal.String.Backtick + .sc { color: $sol-magenta } // Literal.String.Char + .sd { color: $sol-magenta } // Literal.String.Doc + .s2 { color: $sol-magenta } // Literal.String.Double + .se { color: $sol-magenta } // Literal.String.Escape + .sh { color: $sol-magenta } // Literal.String.Heredoc + .si { color: $sol-magenta } // Literal.String.Interpol + .sx { color: $sol-magenta } // Literal.String.Other + .sr { color: $sol-green } // Literal.String.Regex + .s1 { color: $sol-magenta } // Literal.String.Single + .ss { color: $sol-magenta } // Literal.String.Symbol + .bp { color: $sol-mono1 } // Name.Builtin.Pseudo + .vc { color: $sol-cyan } // Name.Variable.Class + .vg { color: $sol-cyan } // Name.Variable.Global + .vi { color: $sol-cyan } // Name.Variable.Instance + .il { color: $sol-cyan } // Literal.Number.Integer.Long +} diff --git a/about.md b/about.md new file mode 100644 index 0000000..8b4e0b2 --- /dev/null +++ b/about.md @@ -0,0 +1,18 @@ +--- +layout: page +title: About +permalink: /about/ +--- + +This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/) + +You can find the source code for Minima at GitHub: +[jekyll][jekyll-organization] / +[minima](https://github.com/jekyll/minima) + +You can find the source code for Jekyll at GitHub: +[jekyll][jekyll-organization] / +[jekyll](https://github.com/jekyll/jekyll) + + +[jekyll-organization]: https://github.com/jekyll diff --git a/assets/css/style.scss b/assets/css/style.scss new file mode 100644 index 0000000..0d1fce9 --- /dev/null +++ b/assets/css/style.scss @@ -0,0 +1,7 @@ +--- +# Only the main Sass file needs front matter (the dashes are enough) +--- + +@import + "minima/skins/{{ site.minima.skin | default: 'classic' }}", + "minima/initialize"; diff --git a/assets/minima-social-icons.svg b/assets/minima-social-icons.svg new file mode 100644 index 0000000..ff02f3e --- /dev/null +++ b/assets/minima-social-icons.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.md b/index.md new file mode 100644 index 0000000..6b5ccc6 --- /dev/null +++ b/index.md @@ -0,0 +1,9 @@ +--- +# +# By default, content added below the "---" mark will appear in the home page +# between the top bar and the list of recent posts. +# To change the home page layout, edit the _layouts/home.html file. +# See: https://jekyllrb.com/docs/themes/#overriding-theme-defaults +# +layout: home +--- diff --git a/minima.gemspec b/minima.gemspec new file mode 100644 index 0000000..39042b3 --- /dev/null +++ b/minima.gemspec @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +Gem::Specification.new do |spec| + spec.name = "minima" + spec.version = "2.5.1" + spec.authors = ["Joel Glovier"] + spec.email = ["jglovier@github.com"] + + spec.summary = "A beautiful, minimal theme for Jekyll." + spec.homepage = "https://github.com/jekyll/minima" + spec.license = "MIT" + + spec.metadata["plugin_type"] = "theme" + + spec.files = `git ls-files -z`.split("\x0").select do |f| + f.match(%r!^(assets|_(includes|layouts|sass)/|(LICENSE|README)((\.(txt|md|markdown)|$)))!i) + end + + spec.add_runtime_dependency "jekyll", ">= 3.5", "< 5.0" + spec.add_runtime_dependency "jekyll-feed", "~> 0.9" + spec.add_runtime_dependency "jekyll-seo-tag", "~> 2.1" + + spec.add_development_dependency "bundler" +end diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..6200392ec92ddf375068861016765e117f55ba65 GIT binary patch literal 96543 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 mYo6`B8ER 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 V-4|lCdp`zV#EpI%s=tjn_!n0|2G0Nh literal 0 HcmV?d00001 diff --git a/script/bootstrap b/script/bootstrap new file mode 100755 index 0000000..492e553 --- /dev/null +++ b/script/bootstrap @@ -0,0 +1,6 @@ +#!/bin/sh + +set -e + +gem install bundler +bundle install diff --git a/script/build b/script/build new file mode 100755 index 0000000..c4ac84f --- /dev/null +++ b/script/build @@ -0,0 +1,6 @@ +#!/bin/sh + +set -e + +echo "Building the example site..." +bundle exec jekyll build diff --git a/script/cibuild b/script/cibuild new file mode 100755 index 0000000..c3c0e99 --- /dev/null +++ b/script/cibuild @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +script/build + +if test -e "./_site/index.html";then + echo "It builds!" + rm -Rf _site +else + echo "Huh. That's odd. The example site doesn't seem to build." + exit 1 +fi + +gem build minima.gemspec diff --git a/script/server b/script/server new file mode 100755 index 0000000..d8c3e15 --- /dev/null +++ b/script/server @@ -0,0 +1,3 @@ +#!/bin/sh + +bundle exec jekyll serve