# Blog

Conducting Assessments and Surveys with Shiny
This post describes a framework for using Shiny for conducting, grading, and providing feedback for assessments. This framework supports any multiple choice format including multiple choice tests or Likert type surveys. A demo is available at jbryer.shinyapps.io/ShinyAssessmentTest or can be run locally as a Github Gist: runGist('a6fb5a3b1d5fd56cff64') Key features of... continue reading...

Shiny App for Bayes Billiards Problem
Consider a pool table of length one. An 8-ball is thrown such that the likelihood of its stopping point is uniform across the entire table (i.e. the table is perfectly level). The location of the 8-ball is recorded, but not known to the observer. Subsequent balls are thrown one at... continue reading...

Conducting Assessments and Surveys with Shiny
This post describes a framework for using Shiny for conducting, grading, and providing feedback for assessments. This framework supports any multiple choice format including multiple choice tests or Likert type surveys. A demo is available at jbryer.shinyapps.io/ShinyAssessmentTest or can be run locally as a Github Gist: runGist('a6fb5a3b1d5fd56cff64') Key features of... continue reading...

Shiny App for Bayes Billiards Problem
Consider a pool table of length one. An 8-ball is thrown such that the likelihood of its stopping point is uniform across the entire table (i.e. the table is perfectly level). The location of the 8-ball is recorded, but not known to the observer. Subsequent balls are thrown one at... continue reading...

Data Caching
Data caching is not new. It is often necessary to save intermediate data files when the process of loading and/or manipulating data takes a considerable amount of time. This problem is further complicated when working with dynamic data that changes regularly. In these situations it often sufficient to use data... continue reading...

Women Graduates in Math, Statistics, and Computer Information Systems
One of the more interesting talks at this year’s useR! Conference was the heR Panel discussing the role of women in the R community. They estimate that fewer than 15% of package authors are women. One of the points brought up was that this is less than the percentage of... continue reading...

useR 2014 Slides for PSAboot and Version 1.1 on CRAN
PSAboot is an R package to assist with bootstrapping propensity score methods. I gave a talk today at the useR! 2014 Conference. The slides can be downloaded from the PSAboot Github page or directly here. The package is described at jason.bryer.org/PSAboot and maintained on Github at github.com/jbryer/PSAboot/. Also, version 1.1... continue reading...

str Implementation for Data Frames
The str function is perhaps the most useful function in R. It provides great information about the structure of some object. When I teach R, especially for those coming from SPSS, the str function for data frames provides the information they are use to seeing on the variable view tab.... continue reading...

Rgitbook Package for Using R Markdown with Gitbook
Last week I published an R script to interface with Gitbook. I received some positive feedback and decided to include all the code in an R package. This also allowed me to make some nice additions including default support for MathJax. It is currently available on Github and can be... continue reading...

Using Gitbook with R Markdown
UPDATE: This R Script has been deprecated and all the functionality has been included in the Rgitbook Package. More information is at http://jason.bryer.org/Rgitbook Gitbook has been getting some (deserved) attention. For those who haven’t seen it, Gitbook is a system to create really beautiful interactive web (or PDF and ebook)... continue reading...

Albany, NY R Users Group
I have started an R Users Group for the Albany, NY area. Hopefully we get enough interest that we can host a meeting in the next couple of months. Please feel free to share with your colleagues and friends. www.meetup.com/Albany-R-Users-Group Feel free to email me or leave comment on this... continue reading...

One of the more tedious parts of working with R is maintaining my R library. To make my R scripts reproducible and sharable, I will install packages if they are not available. For example, the top of my R scripts tend to look something like this: if(!require(devtools) | !require(ggplot2) |... continue reading...

Bootstrapping for Propensity Score Analysis
I am happy to announce that version 1.0 of the PSAboot package has been released to CRAN. This package implements bootstrapping for propensity score analysis. This deviates from typical implementations such as boot in that it allows for separate sampling specifications for treatment and control units. For example, in the... continue reading...

Workshop and Talk Slides from NEAIR Conference
I am about to head home from my fifth time attending the North East Association for Institutional Research (NEAIR), this year in Newport, RI, which was just fantastic. Really great people, interesting talks, and good food. I again taught an Introduction to R and LaTeX for Institutional Research pre-conference workshop... continue reading...

Version 1.1 of the likert Package Released to CRAN
After some delay, we are happy to finally get version 1.1 of the likert package on CRAN. Although labeled 1.1, this is actually the first version of the package released to CRAN. After receiving some wonderful feedback from useR! this year, we held back releasing until we implemented many of... continue reading...

TriMatch - useR! 2013 Slides and Version 0.9 Released to CRAN
Our presentation on the TriMatch package at the useR! 2013 Conference went fantastically. Thanks for those who attended and the wonderful discussion that followed. The slides can be downloaded from Github as well as the abstract. To coincide with our presentation version 0.9 has been released to CRAN. The package... continue reading...

Version 0.9 of timeline on CRAN
The initial version of the timeline package has been released to CRAN. This package provides creates timeline plots using ggplot2 in a style similar to Preceden. I would considered this beta quality as there are more features I would like to add but has enough functionality to possibly be useful... continue reading...

Gambler's Run With Shiny
I finally had an opportunity to play with Shiny, and I am very impressed. I have created a Github Project so head over there for the source code. There are a number of ways to distribute Shiny apps. If you are running R (and mostly likely you are if you... continue reading...

Cut Dates Into Quarters
Frequently I need to recode a date column to quarters. For example, at Excelsior College we have continuous enrollment so we report new enrollments per quarter. To complicate things a bit, our fiscal year starts in July so that July, August, and September represent the first quarter, January, February, and... continue reading...

i Before e Except After c
When I went to school we were always taught the “i before e, except after c” rule for spelling. But how accurate is this rule? Kevin Marks tweeted today the following: »@uberfacts: There are 923 words in the English language that break the “I before E” rule. Only 44 words... continue reading...

Version 1.0 of multilevelPSA Available on CRAN
Version 1.0 of multilevelPSA has been released to CRAN. The multilevelPSA package provides functions to estimate and visualize propensity score models with multilevel, or clustered, data. The graphics are an extension of PSAgraphics package by Helmreich and Pruzek. The example below will investigate the differences between private and public school... continue reading...

Converting a list to a data frame
There are many situations in R where you have a list of vectors that you need to convert to a data.frame. This question has been addressed over at StackOverflow and it turns out there are many different approaches to completing this task. Since I encounter this situation relatively frequently, I... continue reading...

Comparing two data frames with different number of rows
I posted a question over on StackOverflow on an efficient way of comparing two data frames with the same column structure, but with different rows. What I would like to end up with is an n x m logical matrix where n and m are the number of rows in... continue reading...

Version 1.0 of sqlutils available on CRAN
Version 1.0 of sqlutils has been released to CRAN. The sqlutils package is designed to manage a library of SQL files. This package grew out of the needs of an Office of Institutional Research where the vast majority of analysis is conducted on data from our Student Information System (SIS)... continue reading...

Interactive SQL in R
I recently taught a very basic introduction to SQL workshop and needed a way to have participants interact with SQL statements. Obviously there are lots of tools to interface with a database, but since we are all R users I thought it would be nice to be able interact without... continue reading...

One issue I continuously encounter when starting to work with a new dataset is that of the codebook. In general, I prefer to load a codebook into R like any other data source, specifically as a data frame. And ideally, one data frame to provides the variable names with descriptions... continue reading...

Function for Generating LaTeX Tables with Decimal Aligned Numbers
The xtable package is tremendously useful for generating LaTeX tables from data frames. It is also pretty easy to customize the output to handle some special cases of LaTeX formatting. The xtable.decimal function will create a LaTeX table where numeric columns will be vertically aligned on the decimal point. In... continue reading...

Using (R) Markdown, Jekyll, & GitHub for a Website
Introduction Markdown has been growing in popularity for writing documents on the web. With the introduction of R Markdown (see also Jeromy Anglim’s post on getting started with R Markdown) and knitr, R Markdown has simplified the publishing of R analysis on the web. I recently converted my website from... continue reading...

Fifty Shades of Grey in R
My wife went out to her book group tonight and their book of the month was 50 Shades of Grey. Sadly, I could think of is that plotting 50 shades in R would be a neat exercise. require(ggplot2) grey50 <- data.frame( x = rep(1:10, 5), y = rep(1:5, each=10), c... continue reading...

Fun with coin flips
We all know that the odds of flipping an unbiased coin is 50% heads, 50% tails. But what happens if you do this a lot of times. Do you expect the same number of heads and tails? What if we took a cumulative sum where heads = +1 and tails... continue reading...

Visualizing Missing Data
There are several graphics available for visualizing missing data including the VIM package. However, I wanted a plot specifically for looking at the nature of missingness across variables and a clustering variable of interest to support data preparation in multilevel propensity score models (see the multilevelPSA package). The following examples... continue reading...

Graphic Parameters (symbols, line types, and colors) for ggplot2
Following up on John Mount’s post on remembering symbol parameters in ggplot2, I decided to give it a try and included symbols, line types, and colors (based upon Earl Glynn’s wonderful color chart).  Code follows below. require(ggplot2) require(grid) theme_update(panel.background=theme_blank(), panel.grid.major=theme_blank(), panel.border=theme_blank()) #Borrowed (i.e. stollen) from http://research.stowers-institute.org/efg/R/Color/Chart/ColorChart.R getColorHexAndDecimal <- function(color) {... continue reading...

Given a room with n people in it, what is the probability any two will have the same birthday?
Revisiting a fun puzzle I remember first encountering as an undergraduate. Nice example of creating a plot in R using ggplot2. I also plot the probability of someone in the room having the same birthday as you. ## See http://en.wikipedia.org/wiki/Birthday_problem for an explanation of the problem require(ggplot2) require(reshape) theme_update(panel.background=theme_blank(), panel.grid.major=theme_blank(),... continue reading...

Object Oriented Programming in R
As someone who was a Java programmer for many years learning R’s object oriented programming framework has been frustrating to say the least. I like the simplicity of S3 but find it limiting when you wish to write methods that change the underlying data elements. That is, printing, summarizing, and... continue reading...

I have been working on a new package makeR to help manage Sweave projects where you wish to create multiple versions of documents that are based on a single source. For example, I create lots of monthly and quarterly reports using Sweave and the only differences between versions are a few... continue reading...

Visualizing Likert Items
I have become quite a big fan of graphics that combine the features of traditional figures (e.g. bar charts, histograms, etc.) with tables. That is, the combination of numerical results with a visual representation has been quite useful for exploring descriptive statistics. I have wrapped two of my favorites (build around ggplot2)... continue reading...

Managing a Local R Repository
I will be teaching a workshop on R and LaTeX at NEAIR in just under a month. One of the issues I will encounter is a lack of Internet access. I also work with restricted data from NCES which requires the computer to be secured including no network access. As such, I need... continue reading...

Comparing Public and Private Schools
This a PDF of the poster I will be presenting at the Division of Educational Psychology & Methodology annual poster session on May 2, 2011. Comparing Public & Private Schools: An International Perspective using Multilevel Propensity Score Analysis continue reading...

Multilevel Propensity Score Analysis (Beta Presentation)
This is the (beta) presentation I have to Bob Pruzek's Modern Graphics class on March 24, 2011. This was my first time using Prezi, and think it worked quite well for this type of presentation. This will certainly see revisions over the next few months. The scripts and package used... continue reading...

Moodle Presentation
I was invited to give a talk to the Division of Educational Psychology and Methodology on the use of Moodle. I have attached a copy of my slides. Moodle: An Open Solution to Online Course Delivery continue reading...

Relationship Between SAT & College Retention
Here is a quick analysis of the relationship between SAT score and student retention. The data is from the Integrated Postsecondary Education Data System (IPEDS) and analyzed using R. This was a quick analysis and would be careful about making any strong conclusions. The source for running this analysis along... continue reading...

Recreating Gapminder World Map with R & ggplot2
Gapminder has posted an interesting chart using world development indicators from the World Bank. I thought it would be a good exercise to recreate this chart using R and ggplot2. While playing with the data, not log transforming GDP provides some interesting, and perhaps different, interpretation. The R script and graphics are... continue reading...

LaTeX and Sweave
LaTeX is a typesetting language that is known for its beautiful mathematical formulas. It is similar to HTML in that you write your document in plain text and process (or compile) it to create a postscript or PDF file. You will need to download a LaTeX processor for your platform.... continue reading...

Backing Up
Over the past few months it has become very clear that many of my family and friends are not adequately prepared for a computer failure. Part of being prepared is having a good backup system and then sticking to it. However, though backup seems like a seemingly simple concept, the... continue reading...

Junk Food Mathematics
As an undergraduate one of the rites of passage for seniors was taking Bruce Johnston's Junk Food Theology course. The idea arose out of the observation that during the 20th century in America there was on one hand a decline in attendance at weekly religious services but on the other,... continue reading...

Trevor Owens, Technology Evangelist for Zotero
The latest issue of Innovate Journal of Online Education has an interview with Trevor Owens, a technology evangelist for George Mason University's Center for History and New Media. Of interest is the planned 2.0 version due out in 2008 that will include server side functionality. Innovate: Next-Generation Bibliographic Manager :... continue reading...

Bibliographic Software
As a graduate student I've amassed a large number of research articles and books. The question is, how do you keep all of this information organized as to be able to find information later? The answer is: bibliography software. There are many options available for both Windows and Mac but... continue reading...

= Github page; = RSS XML Feed; = External website; = Portable Document File (PDF)