<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>canoe.moore</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/" />
    <link rel="self" type="application/atom+xml" href="http://blog.lib.umn.edu/moor0554/canoemoore/atom.xml" />
    <id>tag:blog.lib.umn.edu,2009-06-28:/moor0554/canoemoore//5042</id>
    <updated>2013-04-14T19:49:42Z</updated>
    <subtitle>Christopher Moore&apos;s Blog</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Enterprise 4.31-en</generator>

<entry>
    <title>Applying generalizability theory with R: A package</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2013/04/g_theory_r_package.html" />
    <id>tag:blog.lib.umn.edu,2013:/moor0554/canoemoore//5042.392197</id>

    <published>2013-04-14T18:42:21Z</published>
    <updated>2013-04-14T19:49:42Z</updated>

    <summary>I have assembled a beta version of my first package called gtheory: Apply generalizability theory with R. I described my efforts in an earlier post. This project continues to be a great learning experience for me, especially in terms of...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Praxes" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<p>I have assembled a beta version of my first <a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a> package called <a href="http://blog.lib.umn.edu/moor0554/canoemoore/gtheory_0.1.zip">gtheory: Apply generalizability theory with R</a>.  I described my efforts in an <a href="http://blog.lib.umn.edu/moor0554/canoemoore/2012/10/g_theory_r.html">earlier post</a>.  This project continues to be a great learning experience for me, especially in terms of seeing how classical test theory, generalizability theory, and multilevel modeling overlap.  I will probably submit a proposal to demonstrate the package at either NCME or AERA in 2014.</p>

<p>Instructions for installing the package:
<ol>
<li>Download the <a href="http://blog.lib.umn.edu/moor0554/canoemoore/gtheory_0.1.zip">gtheory zip file</a></li>
<li>Run the command <font size=-1 face = "Courier New">install.packages("[path to file]/gtheory_0.1.zip", repos = NULL, type = "source")</font>, after substituting the path on your computer.</li>
</ol>
If you wish to try functions not yet in the package, the initial (outdated) demonstration can be found <a href="http://blog.lib.umn.edu/moor0554/canoemoore/G_theory.R">here</a>.
</p>
]]>
        
    </content>
</entry>

<entry>
    <title>Which schools are closing achievement gaps in Minnesota?</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2013/03/schools_closing_gaps_mn.html" />
    <id>tag:blog.lib.umn.edu,2013:/moor0554/canoemoore//5042.388118</id>

    <published>2013-03-09T15:41:12Z</published>
    <updated>2013-05-17T11:22:08Z</updated>

    <summary>Minnesota has large and persistent achievement gaps. It&apos;s an empirically supported proposition no matter how you look at it. But if we are going to tackle the problem, it does matter how we look at it! Well-intentioned advocates and researchers...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Praxes" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<p>Minnesota has <a href="http://minnesota.publicradio.org/display/web/2009/07/14/achievement_gap">large and persistent achievement gaps</a>.  It's an empirically supported proposition no matter how you look at it.  But if we are going to tackle the problem, it does matter how we look at it!  Well-intentioned advocates and researchers sometimes <a href="http://minnesota.publicradio.org/collections/special/columns/cities/archive/2013/03/the-achievement-gap-coming-to-a-theater-near-you.shtml">talk about "the achievement gap" as if there is one definition</a>.  Are they referring to test score differences?  Or graduation rates?  Or gaps in educational opportunities?  Are they referring to math?  Or reading?  Or science?  Are they referring to students of color?  Or students in poverty?  Or English learners?  Or special education students?  Or all four groups?  They don't often say.  Referring to "the achievement gap" is good rhetoric, but I contend that a lack of specificity is impeding progress.  I also contend that we can learn from schools that are closing achievement gaps.</p>

<p>Advocates and researchers would be wise to use the Minnesota Department of Education's (MDE) <em>achievement gap reduction</em> measure when possible.  MDE quantifies gaps as the difference between <em>the growth</em> of historically under-achieving groups relative to more advantaged groups.  The calculation yields a negative number if a school helped reduce achievement gaps in Minnesota and a positive number if a school added to existing gaps.  (<a href="http://www2.ed.gov/policy/eseaflex/approved-requests/mn.pdf">See page 78 of Minnesota's approved No Child Left Behind (NCLB) waiver for the methodology.</a>)  Here's why I think advocates and researchers should consistently publicize and track the achievement gap reduction measure:
<ul>
	<li>It's official.  <a href="http://mn.gov/governor/blog/the-office-of-the-governor-blog-entry-detail.jsp?id=102-41696">Minnesota's accountability system</a> holds schools accountable for achievement gap reduction (i.e., it's one of the Multiple Measures).  It's recognized by the U.S. Department of Education, it's reported annually by MDE, and it's increasingly familiar to teachers, administrators, and parents.</li>
	<li>It's fair.  Student growth is a better measure of the contribution of a school or intervention than proficiency rates, which reflect the economic affluence and selectivity.  When we over-emphasize proficiency it prevents us from finding schools in lower-income areas that are closing gaps.  Growth measures only compare students and schools to those with similar achievement at the beginning of the school year.</li>
	<li>It's embodies a theory of action.  As long as some groups are starting the school year behind, then the only way to close gaps is to <em>accelerate</em> their learning relative to their more advantaged peers.  It's a race, and traditional achievement gap measures paint a picture of the starting line.  The achievement gap reduction measure tells the pace of learning over a school year.</li>
</ul>
</p>

<p>I used <a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a> to create an <a href="http://maps.google.com/maps?q=http://blog.lib.umn.edu/moor0554/canoemoore/AGR_Map.kmz">interactive map</a> to help advocates and researchers become familiar with the achievement gap reduction measure and encourage recognition of schools that are helping close achievement gaps in Minnesota.  The data underlying the map are publicly available from <a href="http://w20.education.state.mn.us/MDEAnalytics/Data.jsp">MDE's Data Center</a>.  MDE does not publish achievement gap reduction for each student group--it only publishes overall achievement gap reduction measures (i.e., student-weighted averages across all historically lower-achieving student groups).  I averaged the annual values over three years (2010-2012) to improve precision.  You can zoom in and click on a school to learn more about it.  Now that we know which schools are helping close achievement gaps in Minnesota, we should recognize their successes and learn from them.  What are the successful schools doing?  How can we encourage other schools to adopt their strategies?</p>

<p>
<TABLE border=1 style="font-size:small">
<CAPTION ALIGN="top"> <strong>Schools helping reduce achievement gaps in Minnesota: Top schools by type</strong> </CAPTION>
<TR> <TH> Type </TH> <TH> School </TH> <TH> District </TH> <TH> Direction of gaps </TH> <TH> Achievement gap reduction </TH>  </TR>
  <TR> <TD> ALP </TD> <TD> Bemidji High ALP </TD> <TD> BEMIDJI PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.13 </TD> </TR>
  <TR> <TD> CHARTER </TD> <TD> Best Academy </TD> <TD> BEST ACADEMY </TD> <TD> Closing </TD> <TD align="right"> -0.42 </TD> </TR>
  <TR> <TD> CHARTER </TD> <TD> Ubah Medical Academy </TD> <TD> UBAH MEDICAL ACADEMY CHARTER SCHOOL </TD> <TD> Closing </TD> <TD align="right"> -0.42 </TD> </TR>
  <TR> <TD> CHARTER </TD> <TD> Twin Cities International Elem </TD> <TD> TWIN CITIES INTERNATIONAL ELEM SCH. </TD> <TD> Closing </TD> <TD align="right"> -0.33 </TD> </TR>
  <TR> <TD> CHARTER </TD> <TD> Yinghua Academy </TD> <TD> YINGHUA ACADEMY </TD> <TD> Closing </TD> <TD align="right"> -0.30 </TD> </TR>
  <TR> <TD> CHARTER </TD> <TD> Global Academy </TD> <TD> GLOBAL ACADEMY </TD> <TD> Closing </TD> <TD align="right"> -0.21 </TD> </TR>
  <TR> <TD> CHARTER </TD> <TD> Minneapolis Academy </TD> <TD> MINNEAPOLIS ACADEMY CHARTER SCHOOL </TD> <TD> Closing </TD> <TD align="right"> -0.21 </TD> </TR>
  <TR> <TD> CHARTER </TD> <TD> Rochester Math and Science Academy </TD> <TD> ROCHESTER MATH AND SCIENCE ACADEMY </TD> <TD> Closing </TD> <TD align="right"> -0.18 </TD> </TR>
  <TR> <TD> CHARTER </TD> <TD> Seed Academy and Harvest Prep school </TD> <TD> HARVEST PREP SCHOOL-SEED ACADEMY </TD> <TD> Closing </TD> <TD align="right"> -0.18 </TD> </TR>
  <TR> <TD> CHARTER </TD> <TD> Schoolcraft Learning Community </TD> <TD> SCHOOLCRAFT LEARNING COMMUNITY CHTR </TD> <TD> Closing </TD> <TD align="right"> -0.15 </TD> </TR>
  <TR> <TD> ELEM </TD> <TD> Atheneum Elem </TD> <TD> INVER GROVE HEIGHTS SCHOOLS </TD> <TD> Closing </TD> <TD align="right"> -0.71 </TD> </TR>
  <TR> <TD> ELEM </TD> <TD> Winsted Elem </TD> <TD> HOWARD LAKE-WAVERLY-WINSTED </TD> <TD> Closing </TD> <TD align="right"> -0.39 </TD> </TR>
  <TR> <TD> ELEM </TD> <TD> Kimberly Lane Elem </TD> <TD> WAYZATA PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.36 </TD> </TR>
  <TR> <TD> ELEM </TD> <TD> Withrow Elem </TD> <TD> STILLWATER AREA PUBLIC SCHOOL DIST. </TD> <TD> Closing </TD> <TD align="right"> -0.32 </TD> </TR>
  <TR> <TD> ELEM </TD> <TD> Lake Marion Elem </TD> <TD> LAKEVILLE PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.31 </TD> </TR>
  <TR> <TD> ELEM </TD> <TD> Goodview Elem </TD> <TD> WINONA AREA PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.31 </TD> </TR>
  <TR> <TD> ELEM </TD> <TD> Forest Hills Elem </TD> <TD> EDEN PRAIRIE PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.28 </TD> </TR>
  <TR> <TD> ELEM </TD> <TD> Washington Elem </TD> <TD> MANKATO PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.27 </TD> </TR>
  <TR> <TD> ELEM </TD> <TD> Frazee-Vergas Elem </TD> <TD> FRAZEE-VERGAS PUBLIC SCHOOL DIST. </TD> <TD> Closing </TD> <TD align="right"> -0.26 </TD> </TR>
  <TR> <TD> HIGH </TD> <TD> Arlington High </TD> <TD> SIBLEY EAST SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.31 </TD> </TR>
  <TR> <TD> HIGH </TD> <TD> St. Anthony Village High </TD> <TD> ST. ANTHONY-NEW BRIGHTON SCHOOLS </TD> <TD> Closing </TD> <TD align="right"> -0.21 </TD> </TR>
  <TR> <TD> HIGH </TD> <TD> Hawley High </TD> <TD> HAWLEY PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.12 </TD> </TR>
  <TR> <TD> HIGH </TD> <TD> Mounds View High </TD> <TD> MOUNDS VIEW PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.08 </TD> </TR>
  <TR> <TD> MIDD </TD> <TD> Minnetonka East </TD> <TD> MINNETONKA PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.21 </TD> </TR>
  <TR> <TD> MIDD </TD> <TD> Valley View Middle </TD> <TD> EDINA PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.18 </TD> </TR>
  <TR> <TD> MIDD </TD> <TD> Minnetonka West Middle </TD> <TD> MINNETONKA PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.14 </TD> </TR>
  <TR> <TD> MIDD </TD> <TD> New Prague Middle </TD> <TD> NEW PRAGUE AREA SCHOOLS </TD> <TD> Closing </TD> <TD align="right"> -0.12 </TD> </TR>
  <TR> <TD> MIDD </TD> <TD> Wayzata Central Middle </TD> <TD> WAYZATA PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.12 </TD> </TR>
  <TR> <TD> MIDD </TD> <TD> Sauk Rapids-Rice Middle </TD> <TD> SAUK RAPIDS-RICE PUBLIC SCHOOLS </TD> <TD> Closing </TD> <TD align="right"> -0.12 </TD> </TR>
  <TR> <TD> MIDD </TD> <TD> Mahtomedi Middle </TD> <TD> MAHTOMEDI PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.10 </TD> </TR>
  <TR> <TD> MIDD </TD> <TD> Sartell Middle </TD> <TD> SARTELL-ST. STEPHEN SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.10 </TD> </TR>
  <TR> <TD> OTHER </TD> <TD> Park Spanish Immersion El. </TD> <TD> ST. LOUIS PARK PUBLIC SCHOOL DIST. </TD> <TD> Closing </TD> <TD align="right"> -0.20 </TD> </TR>
  <TR> <TD> OTHER </TD> <TD> School of Environmental Studies </TD> <TD> ROSEMOUNT-APPLE VALLEY-EAGAN </TD> <TD> Closing </TD> <TD align="right"> -0.19 </TD> </TR>
  <TR> <TD> OTHER </TD> <TD> Friedell Middle </TD> <TD> ROCHESTER PUBLIC SCHOOL DISTRICT </TD> <TD> Closing </TD> <TD align="right"> -0.09 </TD> </TR>
   </TABLE>
</p>

<p><iframe width="640" height="480" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=http:%2F%2Fblog.lib.umn.edu%2Fmoor0554%2Fcanoemoore%2FAGR_Map.kmz&amp;aq=&amp;sll=44.970697,-93.261478&amp;sspn=0.276895,0.441513&amp;ie=UTF8&amp;t=m&amp;ll=46.754917,-93.845215&amp;spn=7.226491,14.0625&amp;z=6&amp;output=embed"></iframe><br /><small><a href="http://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=http:%2F%2Fblog.lib.umn.edu%2Fmoor0554%2Fcanoemoore%2FAGR_Map.kmz&amp;aq=&amp;sll=44.970697,-93.261478&amp;sspn=0.276895,0.441513&amp;ie=UTF8&amp;t=m&amp;ll=46.754917,-93.845215&amp;spn=7.226491,14.0625&amp;z=6" style="color:#0000FF;text-align:left">View Larger Map</a></small></p>

<p>Remembering <a href="http://www.minnpost.com/learning-curve/2013/02/howard-casmeys-legacy-he-was-positive-futuristic-visionary">Hap Casmey</a> inspired me to write this entry.  I enjoyed getting to know Hap later in his life and hearing about his influence on education policy in Minnesota.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Evaluation 2012 presentation</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2012/11/evaluation_2012_presentation.html" />
    <id>tag:blog.lib.umn.edu,2012:/moor0554/canoemoore//5042.374202</id>

    <published>2012-11-02T15:44:52Z</published>
    <updated>2012-11-05T21:29:30Z</updated>

    <summary> The annual conference of the American Evaluation Association came to Minneapolis last week. I enjoyed getting re-acquainted with many of my evaluation colleagues and learning about evaluation studies from around the world without leaving the city I call home....</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Praxes" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<a href="http://comm.eval.org/Prk_12/Go.aspx?c=ViewDocument&DocumentKey=e64a6fe7-7aea-41fa-b979-321a6b1a0d74"><img alt="Evaluation_2012.png" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2012/11/Evaluation_2012-thumb-300x214-137826.png" width="300" height="214" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a>

<p>The annual conference of the <a href="http://www.eval.org/">American Evaluation Association</a> came to Minneapolis last week.  I enjoyed getting re-acquainted with many of my evaluation colleagues and learning about evaluation studies from around the world without leaving the city I call home.  I presented a poster titled "<a href="http://comm.eval.org/Prk_12/Go.aspx?c=ViewDocument&DocumentKey=e64a6fe7-7aea-41fa-b979-321a6b1a0d74">Teacher evaluation and the Standards of Effective Instruction rating instrument: Psychometric considerations</a>".
</p>]]>
        
    </content>
</entry>

<entry>
    <title>Applying generalizability theory with R</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2012/10/g_theory_r.html" />
    <id>tag:blog.lib.umn.edu,2012:/moor0554/canoemoore//5042.370815</id>

    <published>2012-10-11T00:05:35Z</published>
    <updated>2013-04-14T19:20:39Z</updated>

    <summary> One of the things I like about my current job is getting to apply generalizability theory. I have to confess that I didn&apos;t appreciate G theory at first, but now that I&apos;m analyzing data from performance assessments (i.e., ratings...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Praxes" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<p>
One of the things I like about my current job is getting to apply generalizability theory.  I have to confess that I didn't appreciate G theory at first, but now that I'm analyzing data from performance assessments (i.e., ratings of instructional effectiveness) I think it's great for a number of reasons.  I like the concept of universe scores, treating items as a random facet, estimating multiple sources of error, the ability to focus on different objects of measurement (e.g., ratees and raters), and G theory's strong emphasis on finding ways to increase generalizability (i.e., decision studies).  And as someone who has far more experience with item response theory (IRT) where <em>conditional</em> standard errors of measurement (CSEMs) are the norm, I'm especially intrigued by the prospect of <a href="http://apm.sagepub.com/content/22/4/307.abstract">using G theory to estimate CSEMs</a>.
</p>

<p>
It's pretty obvious from this blog that I like statistical programming with <a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a> because it helps me learn methods far better than simply reading about them or using a pre-existing software package.  In that vein, I decided to write <a href="http://blog.lib.umn.edu/moor0554/canoemoore/2013/04/g_theory_r_package.html">some functions to conduct G and D studies</a> with <a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a>.  I've been using synthetic data from <a href="http://www.worldcat.org/title/generalizability-theory/oclc/421439674">Brennan's book</a> and <a href="http://www.worldcat.org/title/generalizability-theory-a-primer/oclc/23972082">Shavelson and Webb's book</a> to ensure that my results match theirs.  The nice thing about using <a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a> for G theory is that you can choose functions for many different packages to fully apply G theory.  For example, by using <a href="http://cran.r-project.org/web/packages/lme4/index.html">lme4</a> to estimate variance components, <a href="http://cran.r-project.org/web/packages/arm/">arm</a> to extract standard errors of random intercepts, and <a href="http://cran.r-project.org/web/packages/ggplot2/index.html">ggplot2</a> to create faceted plots, I am able to create "vertical ruler" plots, which are prevalent among practitioners of many-facets Rasch.  Such plots make it easy to identify the (statistically significantly) highest and lowest performers as well as the most lenient and stringent raters.
</p>

<p>
The plots below illustrate how I've been implementing G theory with <a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a>.  The plots were produced from Brennan's synthetic data set number 4, and the dependability coefficients match those from <a href="http://www.education.uiowa.edu/centers/casma/computer-programs.aspx">GENOVA</a>.  I've never developed an <a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a> package, but given that no one else has so <a href="http://cran.r-project.org/web/views/Psychometrics.html"></a>far, I'd be interested in doing so with <a href="http://blog.lib.umn.edu/moor0554/canoemoore/2013/04/g_theory_r_package.html">the code I'm developing</a>.
<p/>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/Vertical_Ruler_Brennan_4.png"><img alt="Vertical_Ruler_Brennan_4.png" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2012/10/Vertical_Ruler_Brennan_4-thumb-300x300-135407.png" width="300" height="300" class="mt-image-none" style="" /></a>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/Decision_Study_Brennan_4.png"><img alt="Decision_Study_Brennan_4.png" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2012/10/Decision_Study_Brennan_4-thumb-300x300-135409.png" width="300" height="300" class="mt-image-none" style="" /></a>]]>
        
    </content>
</entry>

<entry>
    <title>Estimating congeneric reliability with R</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2012/09/congeneric_reliability_r.html" />
    <id>tag:blog.lib.umn.edu,2012:/moor0554/canoemoore//5042.366314</id>

    <published>2012-09-22T15:00:05Z</published>
    <updated>2012-09-30T05:00:18Z</updated>

    <summary>I was recently tasked with estimating the reliability of scores composed of items on different scales. The lack of a common scale could be seen in widely varying item score means and variances. As discussed by Graham, it&apos;s not widely...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Praxes" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<p>I was recently tasked with estimating the reliability of scores composed of items on different scales.  The lack of a common scale could be seen in widely varying item score means and variances.  As discussed by <a href="http://epm.sagepub.com/content/66/6/930">Graham</a>, it's not widely known in applied educational research that Cronbach's alpha assumes essential tau-equivalence and underestimates reliability when the assumption isn't met.  A friend made a good suggestion to consider stratified alpha, which is commonly used to estimate internal consistency when scores are composed of multiple choice items (scored 0-1) and constructed response items (e.g., scored 0-4).  However, the assessment with which I was concerned does not have clear item-type strata.  I decided to estimate congeneric reliability because it makes few assumptions (e.g., unidimensionality) and doesn't require grouping items into essentially tau-equivalent strata.</p>

<p>With the help of <a href="http://epm.sagepub.com/content/66/6/930">Graham's paper</a> and <a href="http://www.ssicentral.com/lisrel/techdocs/reliabil.pdf">a LISREL tutorial by Raykov</a> I wrote an <a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a> program that estimates congeneric reliability.  The program uses <a href="http://cran.r-project.org/web/packages/sem/index.html">Fox's sem() library</a> to conduct the confirmatory factor analysis with minimal constraints (variance of common true score fixed at 1 for identifiability).  The estimated loadings and error variances are then summed to calculate reliability (i.e., the ratio of true score variance to observed score variance) as:</p>

<div style="text-align: center;"><p>
<img src="http://latex.codecogs.com/gif.latex?\hat{\rho}_{XX'} = \frac { \left( \sum \hat{\lambda}_i \right) ^ 2} {\left( \sum \hat{\lambda}_i \right) ^ 2 + \sum \hat{\delta}_{i} }" style="vertical-align: text-bottom"/>.
</p></div>

<p>I obtained a congeneric reliability estimate of 0.80 and an internal consistency estimate of 0.58 for the scores I was analyzing.  If the items had been essentially tau-equivalent, then the reliability estimates would have been the same.  If I had assumed tau-equivalence, than I would have underestimated the reliability of the total scores (and overestimated standard errors of measurement).  The example below replicates <a href="http://epm.sagepub.com/content/66/6/930">Graham's heuristic example</a>.</p>

<p><font size=-1><pre>
> ############################################
> #Replicate results from Graham (2006) to check congeneric reliability code/calculations.
> 
> library(sem)
> library(psych)
> library(stringr)
> 
> #Variance/covariance matrix
> S.graham <- readMoments(diag = T, names = paste("x", 1:7, sep = ""))
1:  4.98
2:  4.60  5.59
4:  4.45  4.42  6.30
7:  3.84  3.81  3.66  6.44
11:  5.71  5.67  5.52  4.91 11.86
16: 23.85 23.68 22.92 19.87 34.28 127.65 
22: 46.53 46.20 44.67 38.57 62.30 244.36 471.95
29: 
Read 28 items
> 
> ############################################
> #A function to estimate and compare congeneric reliability and internal consistency
> funk.congeneric <- function(cfa.out) {
+   names.loadings <- str_detect(names(cfa.out$coeff), "loading")
+   names.errors <- str_detect(names(cfa.out$coeff), "error")
+   r.congeneric <- sum(cfa.out$coeff[names.loadings]) ^ 2 / 
+     (sum(cfa.out$coeff[names.loadings]) ^ 2 + sum(cfa.out$coeff[names.errors]))
+   round(c("Congeneric" = r.congeneric, "Alpha" = alpha(cfa.out$S)$total$raw_alpha), 2)
+ }
> 
> ############################################
> #Congeneric model; tau-equivalent items
> model.graham <- specifyModel()
1: T -> x1, loading1
2: T -> x2, loading2
3: T -> x3, loading3
4: T -> x4, loading4
5: T -> x5, loading5
6: x1 <-> x1, error1
7: x2 <-> x2, error2
8: x3 <-> x3, error3
9: x4 <-> x4, error4
10: x5 <-> x5, error5
11: T <-> T, NA, 1
12: 
Read 11 records
> cfa.out <- sem(model = model.graham, S = S.graham, N = 60)
> summary(cfa.out)

 Model Chisquare =  0.11781   Df =  5 Pr(>Chisq) = 0.99976
 Chisquare (null model) =  232.13   Df =  10
 Goodness-of-fit index =  0.9992
 Adjusted goodness-of-fit index =  0.99761
 RMSEA index =  0   90% CI: (NA, NA)
 Bentler-Bonnett NFI =  0.99949
 Tucker-Lewis NNFI =  1.044
 Bentler CFI =  1
 SRMR =  0.0049092
 AIC =  20.118
 AICc =  4.6076
 BIC =  41.061
 CAIC =  -25.354 

 Normalized Residuals
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
-0.038700 -0.008860 -0.000002  0.004700  0.002450  0.119000 

 R-square for Endogenous Variables
    x1     x2     x3     x4     x5 
0.9286 0.8175 0.6790 0.4962 0.5968 

 Parameter Estimates
         Estimate Std Error z value Pr(>|z|)             
loading1 2.15045  0.21595   9.9580  2.3263e-23 x1 <--- T 
loading2 2.13776  0.24000   8.9073  5.2277e-19 x2 <--- T 
loading3 2.06828  0.26941   7.6770  1.6281e-14 x3 <--- T 
loading4 1.78754  0.29136   6.1352  8.5040e-10 x4 <--- T 
loading5 2.66040  0.38141   6.9752  3.0535e-12 x5 <--- T 
error1   0.35559  0.17469   2.0356  4.1793e-02 x1 <--> x1
error2   1.02000  0.25339   4.0255  5.6861e-05 x2 <--> x2
error3   2.02222  0.41688   4.8509  1.2293e-06 x3 <--> x3
error4   3.24471  0.62679   5.1767  2.2583e-07 x4 <--> x4
error5   4.78227  0.94911   5.0387  4.6871e-07 x5 <--> x5

 Iterations =  21 
> pathDiagram(cfa.out, edge.labels = "values", ignore.double = F, rank.direction = "TB")
</pre></font></p>

<p>
<a href="http://blog.lib.umn.edu/moor0554/canoemoore/Path_diagram_tau-equivalent.png"><img alt="Path_diagram_tau-equivalent.png" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2012/09/Path_diagram_tau-equivalent-thumb-400x95-134316.png" width="400" height="95" class="mt-image-none" style="" /></a>
</p>

<p><font size=-1><pre>
> funk.congeneric(cfa.out)
Congeneric      Alpha 
      0.91       0.91  
> 
> ############################################
> #Congeneric model; tau-inequivalent items
> model.graham <- specifyModel()
1: T -> x1, loading1
2: T -> x2, loading2
3: T -> x3, loading3
4: T -> x4, loading4
5: T -> x7, loading7
6: x1 <-> x1, error1
7: x2 <-> x2, error2
8: x3 <-> x3, error3
9: x4 <-> x4, error4
10: x7 <-> x7, error7
11: T <-> T, NA, 1
12: 
Read 11 records
> cfa.out <- sem(model = model.graham, S = S.graham, N = 60)
> summary(cfa.out)

 Model Chisquare =  0.0072298   Df =  5 Pr(>Chisq) = 1
 Chisquare (null model) =  353.42   Df =  10
 Goodness-of-fit index =  0.99995
 Adjusted goodness-of-fit index =  0.99985
 RMSEA index =  0   90% CI: (NA, NA)
 Bentler-Bonnett NFI =  0.99998
 Tucker-Lewis NNFI =  1.0291
 Bentler CFI =  1
 SRMR =  0.0010915
 AIC =  20.007
 AICc =  4.497
 BIC =  40.951
 CAIC =  -25.464 

 Normalized Residuals
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
-2.76e-02 -1.27e-04 -1.00e-07 -1.92e-03  1.96e-04  3.70e-03 

 R-square for Endogenous Variables
    x1     x2     x3     x4     x7 
0.9303 0.8171 0.6778 0.4942 0.9902 

 Parameter Estimates
         Estimate Std Error z value  Pr(>|z|)             
loading1  2.15247 0.212984  10.10624 5.1835e-24 x1 <--- T 
loading2  2.13719 0.237279   9.00711 2.1156e-19 x2 <--- T 
loading3  2.06646 0.266419   7.75646 8.7336e-15 x3 <--- T 
loading4  1.78392 0.287599   6.20279 5.5470e-10 x4 <--- T 
loading7 21.61720 2.015041  10.72792 7.5272e-27 x7 <--- T 
error1    0.34688 0.090227   3.84451 1.2080e-04 x1 <--> x1
error2    1.02240 0.200635   5.09584 3.4720e-07 x2 <--> x2
error3    2.02973 0.382466   5.30694 1.1148e-07 x3 <--> x3
error4    3.25764 0.605376   5.38118 7.3998e-08 x4 <--> x4
error7    4.64661 6.387765   0.72742 4.6697e-01 x7 <--> x7

 Iterations =  38 
> pathDiagram(cfa.out, edge.labels = "values", ignore.double = F, rank.direction = "TB")
</pre></font></p>

<p>
<a href="http://blog.lib.umn.edu/moor0554/canoemoore/Path_diagram_tau-inequivalent.png"><img alt="Path_diagram_tau-inequivalent.png" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2012/09/Path_diagram_tau-inequivalent-thumb-400x95-134319.png" width="400" height="95" class="mt-image-none" style="" /></a>
</p>

<p><font size=-1><pre>
> funk.congeneric(cfa.out)
Congeneric      Alpha 
      0.99       0.56  
</pre></font></p>]]>
        
    </content>
</entry>

<entry>
    <title>Converting Rasch units (RITs) to thetas</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2012/05/rits_to_thetas.html" />
    <id>tag:blog.lib.umn.edu,2012:/moor0554/canoemoore//5042.357036</id>

    <published>2012-05-25T16:15:01Z</published>
    <updated>2012-05-29T15:31:31Z</updated>

    <summary>How do you place Measures of Academic Progress (MAP) Rash unit scores (RITs) on the normal theta metric (and vice versa)? I searched the Web but couldn&apos;t find a straightforward answer. What I&apos;ve gathered from various sources is that RIT...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Praxes" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<p>How do you place <a href="http://www.nwea.org/products-services/computer-based-adaptive-assessments/map">Measures of Academic Progress (MAP)</a> Rash unit scores (RITs) on the normal theta metric (and vice versa)?  I searched the Web but couldn't find a straightforward answer.  What I've gathered from various sources is that RIT scores are just logits multiplied by 10 and centered on 200.  From there, logits can be transformed to thetas based on the probabilities of the respective distributions, as shown in the <a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a> code below.</p>

<p>RIT scores are new to me because I've worked mostly with the 3-parameter model until recently.  I've noticed that a lot psychometricians who use item response theory (IRT) fall into one of two camps: Rasch or 3PL.  My personal preference is somewhere in the middle.  I think 1) it's unrealistic to assume items discriminate equally and 2) estimates of <em>a</em> are useful for test construction and adaptive selection.  The <em>c</em> parameter, on the other hand, is costly to estimate and not entirely essential.  So I guess you could say I'm a dispassionate 2PL guy.</p>

<p><font size=-1><pre>
> #Simulate some thetas (z-scores).
> thetas <- sort(rnorm(20))
> thetas
 [1] -1.34485345 -1.08206871 -1.04673807 -0.98990444
 [5] -0.96802821 -0.81766629 -0.56671883 -0.18795885
 [9] -0.17779446 -0.08314090 -0.04615256  0.13611619
[13]  0.13796440  0.43172163  0.47472683  0.57965345
[17]  0.64315758  0.71571489  1.10205842  1.16067809
> 
> #Convert thetas to probabilities then logits.
> p <- pnorm(thetas)
> logits <- log(p / (1 - p))
> 
> #Convert logits to RITs.
> RITs <- logits * 10 + 200
> RITs
 [1] 176.7823 181.8148 182.4653 183.5001 183.8947 186.5552
 [7] 190.8243 196.9958 197.1587 198.6728 199.2634 202.1739
[13] 202.2035 206.9477 207.6533 209.3914 210.4565 211.6874
[19] 218.5559 219.6538
> 
> #Place RITs on normal theta metric.
> funk.RITs.thetas <- function(x) {
+   qnorm(plogis((x - 200) / 10))
+ }
> funk.RITs.thetas(RITs)
 [1] -1.34485345 -1.08206871 -1.04673807 -0.98990444
 [5] -0.96802821 -0.81766629 -0.56671883 -0.18795885
 [9] -0.17779446 -0.08314090 -0.04615256  0.13611619
[13]  0.13796440  0.43172163  0.47472683  0.57965345
[17]  0.64315758  0.71571489  1.10205842  1.16067809
</pre></font></p>
]]>
        
    </content>
</entry>

<entry>
    <title>Urban canoeing: Dining at The Sample Room</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2011/10/urban_canoeing_sample_room.html" />
    <id>tag:blog.lib.umn.edu,2011:/moor0554/canoemoore//5042.316501</id>

    <published>2011-10-22T14:26:19Z</published>
    <updated>2011-12-22T00:30:25Z</updated>

    <summary> I finally found some time to upgrade my Wike canoe trailer. As I mentioned in an earlier post, the trailer had a hard time handling Scrappy, my 17&apos; Alumacraft canoe. I added a U-bolt to adequately secure the bow,...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Personal" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<p>
I finally found some time to upgrade my <a href="http://www.wicycle.com/canoe_woody_wagon_bicycle_trailer.php">Wike canoe trailer</a>.  As I mentioned in <a href="http://blog.lib.umn.edu/moor0554/canoemoore/2010/08/urban_canoeing_cedar_minnehaha.html">an earlier post</a>, the trailer had a hard time handling Scrappy, my 17' Alumacraft canoe.  I added a U-bolt to adequately secure the bow, and I reinforced the aluminum axle with an iron rod to keep it from bending.  It's working well enough to resume canoeing around Minneapolis without a car shuttle.
</p>

<p>
Amy and I took the trailer down <a href="http://www.minneapolisparks.org/grandrounds/map_NE1.htm">Saint Anthony Parkway</a> to the Mississippi River for some paddling at dusk.  We put in at the <a href="http://www.johnweeks.com/river_mississippi/pages/r08.html">Camden Railroad Bridge</a>.  The moon was huge, so we had no trouble navigating after the sun went down.  You can see the moon above <a href="http://psychosuzis.com/">Psycho Suzi's Motor Lounge</a> in the <a href="http://blog.lib.umn.edu/moor0554/canoemoore/NE_Mpls_Canoe_Tour_07.JPG">picture below</a>.
</p>

<p>We got hungry on the river, so we stopped at one of our favorite spots in Northeast: <a href="http://the-sample-room.com/">The Sample Room</a>.  The restaurant conveniently has its own dock and stairway up the steep bank of the river.  Our server even comped us a drink for canoeing in with our life jackets!  After dining on the patio, we continued down the Mississippi to <a href="http://www.wikimapia.org/#lat=44.9936065&lon=-93.2701707&z=16&l=0&m=b">Boom Island Park</a> and rode our bikes home from there.  It was a fun way to spend an evening in Minneapolis!
</p>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/DSCI1039.JPG"><img alt="DSCI1039.JPG" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/10/DSCI1039-thumb-300x225-98672.jpg" width="300" height="225" class="mt-image-none" style="" /></a>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/NE_Mpls_Canoe_Tour_08.JPG"><img alt="NE_Mpls_Canoe_Tour_08.JPG" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/11/NE_Mpls_Canoe_Tour_08-thumb-300x225-104337.jpg" width="300" height="225" class="mt-image-none" style="" /></a>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/NE_Mpls_Canoe_Tour_09.JPG"><img alt="NE_Mpls_Canoe_Tour_09.JPG" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/12/NE_Mpls_Canoe_Tour_09-thumb-300x225-106873.jpg" width="300" height="225" class="mt-image-none" style="" /></a>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/NE_Mpls_Canoe_Tour_07.JPG"><img alt="NE_Mpls_Canoe_Tour_07.JPG" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/12/NE_Mpls_Canoe_Tour_07-thumb-300x225-106869.jpg" width="300" height="225" class="mt-image-none" style="" /></a>
]]>
        
    </content>
</entry>

<entry>
    <title>Urban canoeing: North/Northeast Minneapolis</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2011/09/urban_canoeing_north_northeast_mpls.html" />
    <id>tag:blog.lib.umn.edu,2011:/moor0554/canoemoore//5042.307313</id>

    <published>2011-09-11T16:15:25Z</published>
    <updated>2011-09-30T15:01:03Z</updated>

    <summary>Back in July, my friend, Joe, and I were laid off during the state government shutdown. It was a stressful time, not knowing if or how the shutdown would end and having to cut back on expenses to make up...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Personal" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<p>Back in July, my friend, Joe, and I were laid off during the state government shutdown.  It was a stressful time, not knowing if or how the shutdown would end and having to cut back on expenses to make up for lost income.  We decided to put our worries behind us for a day and make the most of our time off by taking a canoe trip down the Mississippi River.</p>

<p>We started under a rainy sky in North Minneapolis, at the <a href="http://wikimapia.org/#lat=45.0308707&lon=-93.2837588&z=17&l=0&m=b">Camden Avenue bridge boat launch</a>.  I had never paddled the northern section of the Mississippi as it passes through Minneapolis.  It's an industrial stretch of river, but plans have been developed to transform it into a more attractive and accessible destination, much like the river's character further downstream.</p>

<p>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/DSCI0726.JPG"><img alt="DSCI0726.JPG" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/09/DSCI0726-thumb-300x225-91244.jpg" width="300" height="225" class="mt-image-none" style="" /></a>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/DSCI0729.JPG"><img alt="DSCI0729.JPG" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/09/DSCI0729-thumb-300x225-91246.jpg" width="300" height="225" class="mt-image-none" style="" /></a>

<br>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/DSCI0737.JPG"><img alt="DSCI0737.JPG" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/09/DSCI0737-thumb-300x225-93829.jpg" width="300" height="225" class="mt-image-none" style="" /></a>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/DSCI0734.JPG"><img alt="DSCI0734.JPG" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/09/DSCI0734-thumb-300x225-93825.jpg" width="300" height="225" class="mt-image-none" style="" /></a>

</p>

<p>A highlight of our trip occurred just above the uppermost lock on the Mississippi River, near Saint Anthony Falls.  As we explored the northern channel around Nicollet Island, we paddled past a ceremony honoring the ratifications of an Urban Conservation Treaty for Migratory Birds attended by Mayor R.T. Rybak and several other environmental enthusiasts.  A local news station filmed us paddling by to highlight the outdoor recreation potential of urban rivers and the importance of conserving them.  Check out my sweet J-strokes!</p>

<p><iframe frameborder="0" scrolling="no" src="http://eplayer.clipsyndicate.com/cs_api/iframe?pl_id=16462&page_count=4&wpid=8700&windows=1&va_id=2663099&show_title=0&auto_next=0&auto_start=0" width="425" height="330"></iframe></p>

<p>The City of Minneapolis recently held a <a href="http://minneapolisriverfrontdesigncompetition.com/">design competition</a> for the stretch "Above the Falls."  The video accompanying the winning proposal is below.  As a resident of Northeast Minneapolis (river left), it's thrilling to envision an inviting riverfront right in my neighborhood.</p>

<p><iframe src="http://player.vimeo.com/video/19115761?byline=0" width="600" height="338" frameborder="0"></iframe></p>
]]>
        
    </content>
</entry>

<entry>
    <title>Creating accessible tables and graphs with R</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2011/08/accessible_tables_graphs_r.html" />
    <id>tag:blog.lib.umn.edu,2011:/moor0554/canoemoore//5042.305589</id>

    <published>2011-08-27T00:14:20Z</published>
    <updated>2011-09-01T15:07:15Z</updated>

    <summary> I was recently given the task of improving the accessibility of a statistical report, with the goal of meeting level AA of the Web Content Accessibility Guidelines 2.0. The report contains about 600 pages of tables and graphs in...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Praxes" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<p>
I was recently given the task of improving the accessibility of a statistical report, with the goal of meeting level AA of the <a href="http://www.w3.org/TR/WCAG/">Web Content Accessibility Guidelines 2.0</a>.  The report contains about 600 pages of tables and graphs in a DOC file.  The rule of thumb for tables is to ensure that a visually impaired person can use the tab key to navigate easily across cells in a row from the top left of the table to the bottom right.  Additionally, tables and graphs should contain alternative titles and descriptions.
</p>

<p>
Last year, I produced the report with the <a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a> packages <a href="http://cran.r-project.org/web/packages/xtable/index.html">xtable</a> and <a href="http://cran.r-project.org/web/packages/R2HTML/index.html">R2HTML</a>.  <a href="https://sctc.ims.mnscu.edu/shared/FacultyTutorials/TutorialVideos/MakingYourWordDocumentsAccessible.pdf">James Falkofske notes</a> that hypertext markup language (HTML) files are inherently fluid, allowing readers with a wide range of abilities and assistive technologies to access the content.  HTML tables with little or no nesting generally meet the navigation guidelines, even when opened with Word and saved as a word processor document.  However, alternative titles and descriptions are not applied to tables and graphs automatically.
</p>

<p>
It would be very time consuming to retroactively add alternative text to 600 pages of tables and graphs in Word, so I decided to look for ways to modify the defaults in the <a href="http://cran.r-project.org/web/packages/xtable/index.html">xtable</a> and <a href="http://cran.r-project.org/web/packages/R2HTML/index.html">R2HTML</a> packages.  The example below shows that it's possible to add alternative text while writing tables and graphs to a HTML file.  For tables, the goal is to add title and summary attributes to the &lt;TABLE&gt; tag.  Those attributes will show up as alternative text when the HTML file is opened in Word.  For graphs, the goal is to add title and "alt" attributes to the &lt;IMG&gt; tag.  The graph's "alt" attribute will carry over to the alternative description field when the HTML file is opened in Word, but the title won't.  However, adding title attributes will allow web browsers to display a float-over title for graphs as well as tables.  Try it out by floating your cursor over the table and graph below.
</p>

<p><font size=-1><pre>
########################################
#Load libraries.
library(xtable) #for tables
library(R2HTML) #for graphs
library(datasets) #for data

########################################
#Initiate a HTML file to export results.

#The file can be named with a DOC extension to facilitate opening it with Word.
name.file.htm &lt;- "Accessible Tables and Graphs.doc"
HTML.title(
  "Add alternative titles and descriptions to tables and graphs in a HTML-based DOC file", 
  file = name.file.htm, HR = 1, append = F)

########################################
#Accessible table example

#Assign alternative title and description to a single object.
html.table.attributes &lt;- paste('border=1', 
  'title="Table of days of frost and years of life expectancy"', 
  'summary="Table of days of frost and years of life expectancy"')

#The xtable(caption) argument places the title in the first row of the table, making it 
#more difficult to designate table headers to repeat across multiple pages in a document.  
#Produce the table title with HTML.title() instead.
HTML.title("Days of frost and years of life expectancy", file = name.file.htm, HR = 3)

#Create table and write to file.
data.frost.exp &lt;- as.data.frame(state.x77[, c("Frost", "Life Exp")])
names(data.frost.exp)[2] &lt;- "Life"
table.xtable &lt;- xtable(data.frost.exp, digits = c(NA, 0, 2))
print(table.xtable, type = "html", html.table.attributes = html.table.attributes, 
  file = name.file.htm, border = 1, append = T)
HTML("&lt;br&gt;", file = name.file.htm)

########################################
#Accessible graph example

#Modify HTMLInsertGraph() by adding Title and Alt arguments.
HTMLInsertGraph &lt;- function (GraphFileName = "", Caption = "", 
  Title = "untitled graph", Alt = "a graph", 
  GraphBorder = 1, Align = "center", 
  WidthHTML = 500, HeightHTML = NULL, 
  file = get(".HTML.file"), append = TRUE, ...) {
    cat("\n", file = file, append = append, ...)
    cat(paste("&lt;p align=", Align, "&gt;&lt;img src='", GraphFileName, 
      "' title='", Title, "' alt='", Alt, "' border=", GraphBorder, 
      if (!is.null(WidthHTML)) 
        paste(" width=", WidthHTML, sep = "") 
        else "", 
      if (!is.null(HeightHTML)) 
        paste(" height=", HeightHTML, sep = "")
        else "", "&gt;", sep = "", collapse = ""), 
      file = file, append = TRUE, sep = "")
    if (Caption != "") 
      cat(paste("&lt;br&gt;&lt;i class=caption&gt;", Caption, "&lt;/i&gt;"), 
        file = file, append = TRUE, sep = "")
    invisible(return(TRUE))
}

#Assign alternative title and description to objects.
Title &lt;- "Graph of days of frost and years of life expectancy"
Alt &lt;- "Graph of days of frost and years of life expectancy"

name.file.plot &lt;- "Days of frost and years of life expectancy.png"
png(name.file.plot, width = 350, height = 350)
plot(data.frost.exp, main = "Days of frost and years of life expectancy", family = "serif")
abline(lm(Life ~ Frost, data.frost.exp), col = "red")
dev.off()
HTMLInsertGraph(GraphFileName = name.file.plot, file = name.file.htm, Align = "left", 
  WidthHTML = 350, HeightHTML = 350, append = T, Title = Title, Alt = Alt)
HTML("&lt;br&gt;", file = name.file.htm)
</pre></font></p>

<h3 > Days of frost and years of life expectancy</h3>
<TABLE border=1 title="Table of days of frost and years of life expectancy" summary="Table of days of frost and years of life expectancy">
<TR> <TH>  </TH> <TH> Frost </TH> <TH> Life </TH>  </TR>

  <TR> <TD align="right"> Alabama </TD> <TD align="right"> 20 </TD> <TD align="right"> 69.05 </TD> </TR>
  <TR> <TD align="right"> Alaska </TD> <TD align="right"> 152 </TD> <TD align="right"> 69.31 </TD> </TR>

  <TR> <TD align="right"> Arizona </TD> <TD align="right"> 15 </TD> <TD align="right"> 70.55 </TD> </TR>
  <TR> <TD align="right"> Arkansas </TD> <TD align="right"> 65 </TD> <TD align="right"> 70.66 </TD> </TR>

  <TR> <TD align="right"> California </TD> <TD align="right"> 20 </TD> <TD align="right"> 71.71 </TD> </TR>
  <TR> <TD align="right"> Colorado </TD> <TD align="right"> 166 </TD> <TD align="right"> 72.06 </TD> </TR>

  <TR> <TD align="right"> Connecticut </TD> <TD align="right"> 139 </TD> <TD align="right"> 72.48 </TD> </TR>
  <TR> <TD align="right"> Delaware </TD> <TD align="right"> 103 </TD> <TD align="right"> 70.06 </TD> </TR>

  <TR> <TD align="right"> Florida </TD> <TD align="right"> 11 </TD> <TD align="right"> 70.66 </TD> </TR>
  <TR> <TD align="right"> Georgia </TD> <TD align="right"> 60 </TD> <TD align="right"> 68.54 </TD> </TR>

  <TR> <TD align="right"> Hawaii </TD> <TD align="right"> 0 </TD> <TD align="right"> 73.60 </TD> </TR>
  <TR> <TD align="right"> Idaho </TD> <TD align="right"> 126 </TD> <TD align="right"> 71.87 </TD> </TR>

  <TR> <TD align="right"> Illinois </TD> <TD align="right"> 127 </TD> <TD align="right"> 70.14 </TD> </TR>
  <TR> <TD align="right"> Indiana </TD> <TD align="right"> 122 </TD> <TD align="right"> 70.88 </TD> </TR>

  <TR> <TD align="right"> Iowa </TD> <TD align="right"> 140 </TD> <TD align="right"> 72.56 </TD> </TR>
  <TR> <TD align="right"> Kansas </TD> <TD align="right"> 114 </TD> <TD align="right"> 72.58 </TD> </TR>

  <TR> <TD align="right"> Kentucky </TD> <TD align="right"> 95 </TD> <TD align="right"> 70.10 </TD> </TR>
  <TR> <TD align="right"> Louisiana </TD> <TD align="right"> 12 </TD> <TD align="right"> 68.76 </TD> </TR>

  <TR> <TD align="right"> Maine </TD> <TD align="right"> 161 </TD> <TD align="right"> 70.39 </TD> </TR>
  <TR> <TD align="right"> Maryland </TD> <TD align="right"> 101 </TD> <TD align="right"> 70.22 </TD> </TR>

  <TR> <TD align="right"> Massachusetts </TD> <TD align="right"> 103 </TD> <TD align="right"> 71.83 </TD> </TR>
  <TR> <TD align="right"> Michigan </TD> <TD align="right"> 125 </TD> <TD align="right"> 70.63 </TD> </TR>

  <TR> <TD align="right"> Minnesota </TD> <TD align="right"> 160 </TD> <TD align="right"> 72.96 </TD> </TR>
  <TR> <TD align="right"> Mississippi </TD> <TD align="right"> 50 </TD> <TD align="right"> 68.09 </TD> </TR>

  <TR> <TD align="right"> Missouri </TD> <TD align="right"> 108 </TD> <TD align="right"> 70.69 </TD> </TR>
  <TR> <TD align="right"> Montana </TD> <TD align="right"> 155 </TD> <TD align="right"> 70.56 </TD> </TR>

  <TR> <TD align="right"> Nebraska </TD> <TD align="right"> 139 </TD> <TD align="right"> 72.60 </TD> </TR>
  <TR> <TD align="right"> Nevada </TD> <TD align="right"> 188 </TD> <TD align="right"> 69.03 </TD> </TR>

  <TR> <TD align="right"> New Hampshire </TD> <TD align="right"> 174 </TD> <TD align="right"> 71.23 </TD> </TR>
  <TR> <TD align="right"> New Jersey </TD> <TD align="right"> 115 </TD> <TD align="right"> 70.93 </TD> </TR>

  <TR> <TD align="right"> New Mexico </TD> <TD align="right"> 120 </TD> <TD align="right"> 70.32 </TD> </TR>
  <TR> <TD align="right"> New York </TD> <TD align="right"> 82 </TD> <TD align="right"> 70.55 </TD> </TR>

  <TR> <TD align="right"> North Carolina </TD> <TD align="right"> 80 </TD> <TD align="right"> 69.21 </TD> </TR>
  <TR> <TD align="right"> North Dakota </TD> <TD align="right"> 186 </TD> <TD align="right"> 72.78 </TD> </TR>

  <TR> <TD align="right"> Ohio </TD> <TD align="right"> 124 </TD> <TD align="right"> 70.82 </TD> </TR>
  <TR> <TD align="right"> Oklahoma </TD> <TD align="right"> 82 </TD> <TD align="right"> 71.42 </TD> </TR>

  <TR> <TD align="right"> Oregon </TD> <TD align="right"> 44 </TD> <TD align="right"> 72.13 </TD> </TR>
  <TR> <TD align="right"> Pennsylvania </TD> <TD align="right"> 126 </TD> <TD align="right"> 70.43 </TD> </TR>

  <TR> <TD align="right"> Rhode Island </TD> <TD align="right"> 127 </TD> <TD align="right"> 71.90 </TD> </TR>
  <TR> <TD align="right"> South Carolina </TD> <TD align="right"> 65 </TD> <TD align="right"> 67.96 </TD> </TR>

  <TR> <TD align="right"> South Dakota </TD> <TD align="right"> 172 </TD> <TD align="right"> 72.08 </TD> </TR>
  <TR> <TD align="right"> Tennessee </TD> <TD align="right"> 70 </TD> <TD align="right"> 70.11 </TD> </TR>

  <TR> <TD align="right"> Texas </TD> <TD align="right"> 35 </TD> <TD align="right"> 70.90 </TD> </TR>
  <TR> <TD align="right"> Utah </TD> <TD align="right"> 137 </TD> <TD align="right"> 72.90 </TD> </TR>

  <TR> <TD align="right"> Vermont </TD> <TD align="right"> 168 </TD> <TD align="right"> 71.64 </TD> </TR>
  <TR> <TD align="right"> Virginia </TD> <TD align="right"> 85 </TD> <TD align="right"> 70.08 </TD> </TR>

  <TR> <TD align="right"> Washington </TD> <TD align="right"> 32 </TD> <TD align="right"> 71.72 </TD> </TR>
  <TR> <TD align="right"> West Virginia </TD> <TD align="right"> 100 </TD> <TD align="right"> 69.48 </TD> </TR>

  <TR> <TD align="right"> Wisconsin </TD> <TD align="right"> 149 </TD> <TD align="right"> 72.48 </TD> </TR>
  <TR> <TD align="right"> Wyoming </TD> <TD align="right"> 173 </TD> <TD align="right"> 70.29 </TD> </TR>

   </TABLE>

<p class='character'><br></p>

<p align=left><img src='http://blog.lib.umn.edu/moor0554/canoemoore/Days%20of%20frost%20and%20years%20of%20life%20expectancy.png' title='Graph of days of frost and years of life expectancy' alt='Graph of days of frost and years of life expectancy' border=1 width=350 height=350>
]]>
        
    </content>
</entry>

<entry>
    <title>Best breweries in Minnesota: Value-added ratings</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2011/07/best_breweries_minnesota_value_added.html" />
    <id>tag:blog.lib.umn.edu,2011:/moor0554/canoemoore//5042.298965</id>

    <published>2011-07-10T02:55:33Z</published>
    <updated>2012-01-25T13:35:41Z</updated>

    <summary> A good friend of mine told me to check out Beer Advocate online. Their rating system does a good job of balancing simplicity (A-F grades) with thoroughness (measures of central tendency and dispersion). I also appreciate the way it...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Praxes" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<p>
A good friend of mine told me to check out <a href="http://beeradvocate.com/">Beer Advocate</a> online.  <a href="http://beeradvocate.com/help/index?topic=ratings">Their rating system</a> does a good job of balancing simplicity (A-F grades) with thoroughness (measures of central tendency and dispersion).  I also appreciate the way it encourages raters and readers to consider multiple dimensions of a beer's quality--its look, smell, taste, and feel--in addition to overall quality.
</p>

<p>
As a practitioner of multilevel and latent variable modeling, one aspect of <a href="http://beeradvocate.com/help/index?topic=ratings">Beer Advocate's rating system</a> has given me pause: a lack of adjustment for consistently high- or low-raters.  What's concerning about a simple average of ratings?  Let's imagine a plausible scenario: a motivated group of beer aficionados with high standards get their hands on a limited-release beer and publish their reviews on <a href="http://beeradvocate.com/">Beer Advocate</a>.  The beer could be world class, but if only tough raters have tried it, then the average rating will appear lower.  Conversely, a large number of uncritical raters could review a mediocre beer, resulting in an excellent rating on average.
</p>

<p>
Is my concern warranted?  If so, which beers and breweries are rated highest after adjusting for raters and other factors?  To answer those questions, I wrote some <a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a> code to gather <a href="http://beeradvocate.com/">Beer Advocate</a> ratings of beers produced by <a href="http://beeradvocate.com/beerfly/list?c_id=US&s_id=MN&brewery=Y">Minnesota breweries</a>.  The code relies heavily on the <a href="http://cran.r-project.org/web/packages/XML/index.html">XML</a> and <a href="http://cran.r-project.org/web/packages/stringr/index.html">stringr</a> packages.  After gathering the ratings, I decided to check my assumption of within-rater consistency.  The intraclass correlation coefficient of <em>r</em> = 0.13 indicates a small degree of consistency within raters, but enough to justify my concern.
</p>

<p>
I specified a multilevel model to obtain value-added ratings of beers and breweries while adjusting for rater and beer characteristics.  For simplicity, I decided to focus on the overall rating, although I would like to consider multiple dimensions of beer quality (look, smell, taste, and feel) in future analyses.  The model specifies random effects for raters, cross-classified with beers nested in breweries.  The fixed effects were the serving type experienced by the rater for a given beer (e.g., can), the beer's alcohol by volume (ABV), and its style (e.g., porter).
</p>

<div style="text-align: center;"><p>
<img src="http://latex.codecogs.com/gif.latex?\begin{align*} \small{\text{Level 1: Ratings}}\\ \text{ln}\left(\tfrac{(Overall_{ijkl}-1)\div 4}{1-(Overall_{ijkl}-1)\div 4}\right) &= \beta_{0jkl} + \mathbf{Served}_{ij} \boldsymbol{\beta}_1 + e_{ijkl}\\ \small{\text{Level 2: Raters and beers}}\\ \beta_{0jkl} &= \beta_{00l} + \beta_{01} ABV_k + \mathbf{Style}_k \boldsymbol{\beta}_{02} + r_{0j} + r_{0kl}\\ \small{\text{Level 3: Breweries}}\\ \beta_{00l} &= \beta_{000} + r_{00l} \end{align*}" style="vertical-align: text-bottom"/>.
</p></div>

<p>
Note that I transformed the overall rating from a 1-5 scale to logits.  I did so to avoid predictions below the floor of 1 point and above the ceiling of 5 points on the original scale (i.e., to enforce lower and upper asymptotes) and to spread the ratings out at the tails (e.g., make it "harder" to go from 4.5 to 5 than going from 3.5 to 4).  The chart below shows the resulting ogival relationship between the original point system and the logits.
</p>

<p>
<strong>Plot showing transformation from points to logits</strong><br>
<a href="http://blog.lib.umn.edu/moor0554/canoemoore/Points_to_Logits.png"><img alt="Points_to_Logits.png" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/07/Points_to_Logits-thumb-350x350-86801.png" width="350" height="350" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>
</p>

<p>
I estimated the model parameters with the <a href="http://cran.r-project.org/web/packages/lme4/index.html">lme4</a> package.  Given the large number of fixed effects (and the need for future blog content), I'll describe the influence of serving type, ABV, and style at a later date.  The value added by breweries after adjusting for rater and beer characteristics is shown in the table below.  Value-added logits were transformed back to the original scale, with values in the table representing point deviations from the brewery average, but the logit and point ratings are virtually the same.  <a href="http://www.schellsbrewery.com/">August Schell Brewing Company</a> recently <a href="http://www.startribune.com/lifestyle/taste/125220093.html">won national accolades</a>, but it came in second to a relative newcomer, <a href="http://www.fultonbeer.com/">Fulton Beer</a>.  <a href="http://www.summitbrewing.com/">Summit Brewing</a> and <a href="http://www.surlybrewing.com/">Surly Brewing</a> followed closely in the third and fourth spots.  The results show some discrepancies between the value-added ratings and <a href="http://beeradvocate.com/">Beer Advocate's</a> grades, which are based on the simple average of all beer ratings.  For example, <a href="http://www.harrietbrewing.com/">Harriet Brewing</a> received an A-, compared to Schell's B grade, but Harriet's value-added rating is below average.
</p>

<TABLE border=1>
<CAPTION ALIGN="top"> <strong>Breweries sorted by value-added ratings</strong> </CAPTION>
<TR> <TH> Brewery </TH> <TH> Value-added (logits) </TH> <TH> Value-added (points) </TH> <TH> Beer Advocate grade<br>(average beer rating) </TH>  </TR>
  <TR> <TD> Fulton Beer </TD> <TD align="center"> 0.85 </TD> <TD align="center"> 0.80 </TD> <TD align="center"> A- </TD> </TR>
  <TR> <TD> August Schell Brewing Co., Inc. </TD> <TD align="center"> 0.83 </TD> <TD align="center"> 0.79 </TD> <TD align="center"> B </TD> </TR>
  <TR> <TD> Summit Brewing Company </TD> <TD align="center"> 0.80 </TD> <TD align="center"> 0.76 </TD> <TD align="center"> B+ </TD> </TR>
  <TR> <TD> Surly Brewing Company </TD> <TD align="center"> 0.71 </TD> <TD align="center"> 0.68 </TD> <TD align="center"> A- </TD> </TR>
  <TR> <TD> Minneapolis Town Hall Brewery </TD> <TD align="center"> 0.27 </TD> <TD align="center"> 0.27 </TD> <TD align="center"> A- </TD> </TR>
  <TR> <TD> Lake Superior Brewing Company </TD> <TD align="center"> 0.18 </TD> <TD align="center"> 0.18 </TD> <TD align="center"> B </TD> </TR>
  <TR> <TD> Fitger's Brewhouse </TD> <TD align="center"> 0.10 </TD> <TD align="center"> 0.10 </TD> <TD align="center"> B+ </TD> </TR>
  <TR> <TD> Olvalde Farm &amp  Brewing Company </TD> <TD align="center"> 0.08 </TD> <TD align="center"> 0.08 </TD> <TD align="center"> A- </TD> </TR>
  <TR> <TD> Granite City Food &amp  Brewery </TD> <TD align="center"> 0.04 </TD> <TD align="center"> 0.04 </TD> <TD align="center"> B- </TD> </TR>
  <TR> <TD> Flat Earth Brewing Company </TD> <TD align="center"> 0.03 </TD> <TD align="center"> 0.03 </TD> <TD align="center"> B+ </TD> </TR>
  <TR> <TD> Brau Brothers Brewing Co., LLC </TD> <TD align="center"> 0.02 </TD> <TD align="center"> 0.02 </TD> <TD align="center"> B </TD> </TR>
  <TR> <TD> Pig's Eye Brewing Company </TD> <TD align="center"> 0.00 </TD> <TD align="center"> 0.00 </TD> <TD align="center"> D+ </TD> </TR>
  <TR> <TD> Harriet Brewing </TD> <TD align="center"> -0.09 </TD> <TD align="center"> -0.09 </TD> <TD align="center"> A- </TD> </TR>
  <TR> <TD> Lift Bridge Brewery </TD> <TD align="center"> -0.11 </TD> <TD align="center"> -0.11 </TD> <TD align="center"> B+ </TD> </TR>
  <TR> <TD> Leech Lake Brewing Company </TD> <TD align="center"> -0.14 </TD> <TD align="center"> -0.14 </TD> <TD align="center"> B+ </TD> </TR>
  <TR> <TD> Barley John's Brew Pub </TD> <TD align="center"> -0.26 </TD> <TD align="center"> -0.26 </TD> <TD align="center"> B+ </TD> </TR>
  <TR> <TD> McCann's Food &amp  Brew </TD> <TD align="center"> -0.27 </TD> <TD align="center"> -0.26 </TD> <TD align="center"> B+ </TD> </TR>
  <TR> <TD> St. Croix Brewing Company, LLC </TD> <TD align="center"> -0.69 </TD> <TD align="center"> -0.66 </TD> <TD align="center"> C </TD> </TR>
  <TR> <TD> Cold Spring Brewing Co. </TD> <TD align="center"> -0.99 </TD> <TD align="center"> -0.91 </TD> <TD align="center"> D+ </TD> </TR>
  <TR> <TD> Great Waters Brewing </TD> <TD align="center"> -1.37 </TD> <TD align="center"> -1.19 </TD> <TD align="center"> B+ </TD> </TR>
   </TABLE>

<p><br>
A different picture emerges when one considers that value-added ratings are point estimates within a range of certainty.  The prediction-interval plot below shows that we can't confidently conclude that Fulton Beer scored above average, let alone out performed Shell's, Summit, or Surly.  We can confidently say, though, that Shell's, Summit, and Surly scored above average, and along with <a href="http://www.townhallbrewery.com/">Minneapolis Town Hall Brewery</a>, they significantly out-performed <a href="http://www.coldspringbrewery.com/">Cold Spring Brewing Co.</a> and <a href="http://greatwatersbc.com/">Great Waters Brewing</a>.
</p>

<p>
<strong>Plot of breweries' value-added ratings with 95% prediction intervals</strong><br>
<a href="http://blog.lib.umn.edu/moor0554/canoemoore/Breweries_Value-Added.png"><img alt="Breweries_Value-Added.png" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/07/Breweries_Value-Added-thumb-350x350-86935.png" width="350" height="350" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>
</p>

<p>
The results highlight some of the benefits of multilevel modeling and the limits of value-added ratings.  By controlling for beer characteristics and separately estimating variance components for raters and beers nested in breweries, I have reduced the degree to which raters' tastes and brewers' preferences for certain types of beers are confounding brewery ratings.  That is, the value-added ratings reflect the brewery's overall quality with greater fidelity.  Nevertheless, we should keep in mind that value-added ratings are based on error unexplained by theory/fixed effects, that they are point estimates within a range of certainty, and that one should interpret value-added ratings with caution because personal preferences still count.  This analysis has motivated me to try beers by the breweries with high value-added ratings, but I know from experience that I like beers brewed by <a href="http://www.braubrothersbrewing.com/">Brau Brothers</a>, <a href="http://www.liftbridgebrewery.com/">Lift Bridge</a>, and <a href="http://www.barleyjohns.com/">Barley John's</a>, even though their value-added point estimates place them in the bottom half of Minnesota breweries.
</p>
]]>
        
    </content>
</entry>

<entry>
    <title>Using irtoys, plyr, and ggplot2 for test development</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2011/07/irtoys_plyr_ggplot2_test_development.html" />
    <id>tag:blog.lib.umn.edu,2011:/moor0554/canoemoore//5042.297114</id>

    <published>2011-07-08T16:29:19Z</published>
    <updated>2011-07-27T15:02:55Z</updated>

    <summary>My job as a Quantitative Analyst at the Minnesota Department of Education requires me to &quot;provide evaluation, statistical, and psychometric support to the Division of Research and Assessment through the entire process of design, development, and reporting to the Minnesota...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Praxes" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<p>My job as a Quantitative Analyst at the <a href="http://education.state.mn.us/MDE/Accountability_Programs/Assessment_and_Testing/index.html">Minnesota Department of Education</a> requires me to "provide evaluation, statistical, and psychometric support to the Division of Research and Assessment through the entire process of design, development, and reporting to the Minnesota assessment system."  That's an accurate job description, but a little vague.  What I really do is write a lot of <a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a> code to apply item response theory (IRT) and compare item and test characteristics across multiple years and/or forms to maintain high quality.</p>

<p><a href="http://cran.r-project.org/"><img alt="Rlogo.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/Rlogo-thumb.jpg" width="25" height="19" style="vertical-align: text-bottom"/></a> is great for plotting item and test characteristics across multiple years and/or forms, but it requires using a few packages in concert (i.e., to my knowledge there is no single package designed for this purpose).  The <a href="http://cran.r-project.org/web/packages/irtoys/index.html">irtoys</a> package provides many useful functions for test development under IRT; the <a href="http://had.co.nz/plyr/">plyr</a> package allows one to apply irtoys' functions to subsets of item parameters in a data set (e.g., by strand); and the <a href="http://had.co.nz/ggplot2/">ggplot2</a> package allows one to overlay and facet item and test curves.</p>

<p>In the following reproducible example, I graphically compare item and test characteristics of the 2009 and 2010 grade 3 Minnesota Comprehensive Assessments of reading ability.  Note that for simplicity, I have excluded two polytomous items from 2009 and a few dichotomous items from 2010 from the <a href="http://education.state.mn.us/MDE/Accountability_Programs/Assessment_and_Testing/Assessments/MCA/TechReports/index.html">published item parameter estimates</a>.  Also note that items have been assigned to strands arbitrarily in this example.  Graphs such as these allow us to answer questions like, "Did the 2010 form yield as much information (i.e., measure with equal or less error) at the cut scores as the 2009 form?"  The graphs also provide guidance for replacing undesirable items.</p>

<p><font size=-1><pre>

########################################
#Combine two years' worth of item parameter estimates from grade 3.

data.pars.2009 <- matrix(ncol = 3, byrow = T, c(0.57, -1.24, 0.17, 0.93, -0.74, 0.25, 
  1.45, -0.45, 0.19, 0.97, -0.5, 0.13, 0.95, -0.8, 0.62, 1.07, -0.38, 0.24, 0.87, 
  0.37, 0.22, 0.61, -1.45, 0.02, 0.84, -1.03, 0.19, 0.72, -0.23, 0.12, 0.93, -1.6, 
  0.25, 0.68, -2.02, 0.06, 1.1, -1.5, 0.36, 0.74, -1.6, 0.51, 1.01, -1.01, 0.21, 
  0.81, -1.52, 0.16, 0.93, -0.5, 0.11, 0.34, -0.75, 0.02, 0.92, -0.93, 0.19, 1.14, 
  0.21, 0.26, 0.54, -0.59, 0.1, 0.86, -0.52, 0.28, 1.04, -1.77, 0.05, 0.84, -1.68, 
  0.02, 1.46, -1.7, 0.17, 1.3, -1.16, 0.21, 0.51, -0.62, 0.1, 1.09, -1.04, 0.17, 
  0.66, -2.06, 0.09, 1.11, -0.61, 0.11, 1.34, -0.9, 0.26, 1.3, -1.24, 0.19, 1.37, 
  -1.72, 0.24, 1.09, -1.37, 0.16, 0.89, -0.94, 0.08, 1.24, -1.38, 0.14, 0.79, -1.32, 
  0.11, 1.09, -1.69, 0.13))
data.pars.2009 <- data.frame(2009, data.pars.2009)
names(data.pars.2009) <- c("year", "a", "b", "c")
data.pars.2009$strand <- factor(rep(1:4, length.out = 38), labels = paste("Strand", 1:4))

data.pars.2010 <- matrix(ncol = 3, byrow = T, c(1, -2.02, 0.05, 0.61, -0.88, 0.24, 
  0.74, -1.36, 0.08, 0.93, 0.63, 0.25, 0.94, 0.38, 0.23, 0.56, -0.14, 0.32, 0.7, 
  -0.73, 0.08, 1.1, -2.54, 0.02, 1.17, -0.36, 0.22, 0.46, 0.76, 0.09, 0.77, -1.53, 
  0.09, 1.5, -1.27, 0.18, 1.01, -1.41, 0.1, 1.63, -1.61, 0.21, 1.33, -1.63, 0.13, 
  1.11, -1.01, 0.19, 1.05, -1.17, 0.07, 0.88, -0.33, 0.23, 0.56, -0.65, 0.28, 1.03, 
  0.45, 0.13, 1.29, -1.73, 0.12, 0.96, -1.54, 0.15, 0.62, -1.33, 0.09, 0.67, -1.41, 
  0.06, 0.74, 0.16, 0.3, 1.33, -0.94, 0.26, 1.31, -1.71, 0.23, 1.14, -1.42, 0.16, 
  0.96, -0.87, 0.09, 1.22, -1.36, 0.14, 0.86, -1.19, 0.17, 0.94, -2.48, 0.02, 0.81, 
  -1.96, 0.02, 0.98, -0.86, 0.13, 0.8, -0.68, 0.11, 0.72, -1.67, 0.04, 0.63, 0.32, 
  0.16, 1.24, -1.64, 0.33))
data.pars.2010 <- data.frame(2010, data.pars.2010)
names(data.pars.2010) <- c("year", "a", "b", "c")
data.pars.2010$strand <- factor(rep(1:4, length.out = 38), labels = paste("Strand", 1:4))

data.pars <- rbind(data.pars.2009, data.pars.2010)
data.pars$year <- factor(data.pars$year)
data.pars$id <- factor(1:nrow(data.pars))

#Apply D scaling constant.
data.pars$a <- data.pars$a * 1.7

#Theta values for plotting
thetas <- seq(-3, 3, by = 0.1)

#Theta cut scores
cuts.grade3 <- c(-1.40, -0.84, -0.01)


########################################
#Plot overlapping test characteristic curves.

funk <- function(z) with(trf(z[, c("a", "b", "c")], x = thetas), data.frame(Ability = x, f))
data.plot <- ddply(data.pars, "year", funk)

g1 <- ggplot(data.plot, aes(x = Ability, y = f)) + 
  geom_vline(xintercept = cuts.grade3, linetype = 2, lwd = 1, color = "darkgrey") +
  geom_line(aes(color = year, linetype = year), lwd = 1) + 
  scale_colour_manual(name = "Year", values = c("darkgoldenrod1", "darkblue")) + 
  scale_linetype_manual(name = "Year", values = 2:1) + 
  scale_y_continuous(name = "Expected score") + 
  opts(title = "Test characteristic curves")
g1

</pre></font></p>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/TCCs.png"><img alt="TCCs.png" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/07/TCCs-thumb-350x350-86641.png" width="350" height="350" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

<p>The test characteristic curves appear comparable up to the "exceeds proficiency standard" cut score, above which the test became more difficult compared to 2009.</p>

<p><font size=-1><pre>

########################################
#Plot overlapping conditional standard errors of measurement (from test information).

funk <- function(z) with(tif(z[, c("a", "b", "c")], x = thetas), data.frame(Ability = x, f))
data.plot <- ddply(data.pars, "year", funk)
data.plot$f <- 1/sqrt(data.plot$f)

g1 <- ggplot(data.plot, aes(x = Ability, y = f)) + 
  geom_vline(xintercept = cuts.grade3, linetype = 2, lwd = 1, color = "darkgrey") +
  geom_line(aes(color = year, linetype = year), lwd = 1) + 
  scale_colour_manual(name = "Year", values = c("darkgoldenrod1", "darkblue")) + 
  scale_linetype_manual(name = "Year", values = 2:1) + 
  scale_y_continuous(name = "CSEM") + 
  opts(title = "Conditional standard errors of measurement")
g1

</pre></font></p>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/CSEMs.png"><img alt="CSEMs.png" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/07/CSEMs-thumb-350x350-86643.png" width="350" height="350" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

<p>The conditional standard errors of measurement appear comparable, overall, except for the 2010 standard error at the exceeds-proficiency cut, which appears to slightly exceed the 0.25 rule of thumb.</p>

<p><font size=-1><pre>

########################################
#Plot overlapping CSEMs faceted by strand.

funk <- function(z) with(tif(z[, c("a", "b", "c")], x = thetas), data.frame(Ability = x, f))
data.plot <- ddply(data.pars, c("year", "strand"), funk)
data.plot$f <- 1/sqrt(data.plot$f)

g1 <- ggplot(data.plot, aes(x = Ability, y = f)) + 
  geom_vline(xintercept = cuts.grade3, linetype = 2, lwd = 1, color = "darkgrey") +
  geom_line(aes(color = year, linetype = year), lwd = 1) + 
  scale_colour_manual(name = "Year", values = c("darkgoldenrod1", "darkblue")) + 
  scale_linetype_manual(name = "Year", values = 2:1) + 
  facet_wrap( ~ strand) + 
  scale_y_continuous(name = "CSEM") + 
  opts(title = "Conditional standard errors of measurement")
g1

</pre></font></p>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/CSEMs_Strand.png"><img alt="CSEMs_Strand.png" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/07/CSEMs_Strand-thumb-350x350-86645.png" width="350" height="350" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

<p>It looks like strand 3 could use a highly discriminating difficult item to bring its CSEM in line with the corresponding 2009 CSEM at the exceeds-proficiency cut.</p>

<p><font size=-1><pre>

########################################
#Plot item characteristic curves faceted by strand.

funk <- function(z) with(irf(z[, c("a", "b", "c")], x = thetas), data.frame(Ability = x, f))
data.plot <- ddply(data.pars, c("id", "year", "strand"), funk)

g1 <- ggplot(data.plot, aes(x = Ability, y = f)) + 
  geom_vline(xintercept = cuts.grade3, linetype = 2, lwd = 1, color = "darkgrey") +
  geom_line(aes(group = id:year, color = year, linetype = year)) + 
  scale_colour_manual(name = "Year", values = c("darkgoldenrod1", "darkblue")) + 
  scale_linetype_manual(name = "Year", values = 2:1) + 
  facet_wrap( ~ strand) + 
  scale_y_continuous(name = "Probability", breaks = seq(0, 1, by = 0.25), limits = c(0, 1)) + 
  opts(title="Item characteristic curves")
g1

</pre></font></p>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/ICCs_Strand.png"><img alt="ICCs_Strand.png" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/07/ICCs_Strand-thumb-350x350-86649.png" width="350" height="350" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

<p>Compared to 2009, there are fewer items from strands 1 and 2 that students are able to guess easily (i.e., high <em>c</em> parameters/lower asymptotes).  As noted above, strand 3 lacks an item that discriminates at the exceeds-proficiency cut.  Replacing the poorly discriminating difficult item in strand 2 with a higher discriminating one would also reduce measurement error of high-ability students.</p>

]]>
        
    </content>
</entry>

<entry>
    <title>My new nephews are way above average</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2011/06/nephews_above_average.html" />
    <id>tag:blog.lib.umn.edu,2011:/moor0554/canoemoore//5042.294814</id>

    <published>2011-06-03T16:36:44Z</published>
    <updated>2011-06-03T17:03:18Z</updated>

    <summary> My new nephews, Jacob and Jadon, are way above average. And though they don&apos;t even live in Lake Wobegon! See, it says so right on their onesies that I got from NausicaaDistribution....</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Personal" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<p>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/Jacob_Outlier.jpg"><img alt="Jacob_Outlier.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/06/Jacob_Outlier-thumb-225x300-84318.jpg" width="225" height="300" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a>

My new nephews, Jacob and Jadon, are way above average.  And though they don't even live in <a href="http://wikimapia.org/#lat=46.3848332&lon=-93.482666&z=7&l=0&m=b">Lake Wobegon</a>!  See, it says so right on their onesies that I got from <a href="http://www.etsy.com/shop/NausicaaDistribution">NausicaaDistribution</a>.

<br>

<br>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/Jadon_Outlier.jpg"><img alt="Jadon_Outlier.jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/06/Jadon_Outlier-thumb-300x225-84320.jpg" width="300" height="225" class="mt-image-left" style="float: left; margin: 0 20px 20px 0;" /></a>

</p>]]>
        
    </content>
</entry>

<entry>
    <title>Eastside Food Co-op goes solar</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2011/01/eastside_food_coop_goes_solar.html" />
    <id>tag:blog.lib.umn.edu,2011:/moor0554/canoemoore//5042.265885</id>

    <published>2011-01-06T02:26:59Z</published>
    <updated>2011-02-04T22:27:54Z</updated>

    <summary>I love Eastside Food Co-op. They&apos;re in my neighborhood and stock all my grocery needs. They show informative movies like &quot;Troubled Waters: A Mississippi River Story,&quot; which the University of Minnesota helped create but balked at showing. They hold community...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Personal" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<p>I love <a href="http://www.eastsidefood.coop">Eastside Food Co-op</a>.  They're in my neighborhood and stock all my grocery needs.  They show informative movies like <a href="http://www.eastsidefood.coop/content/co-op-movie-night-0">"Troubled Waters: A Mississippi River Story,"</a> which the University of Minnesota helped create but <a href="http://www.startribune.com/local/105062649.html">balked at showing</a>.  They hold community forums to discuss issues like <a href="http://marytreacy.wordpress.com/2010/11/26/whither-shoreham-yards-blight-or-boon-to-northeast-minneapolis/">pollution at Shoreham Yards</a>.  And they've welcomed <a href="http://www.eastsidefood.coop/content/recovery-bike-shop">Recovery Bike Shop</a> into the building.  A lot of great things are happening at Eastside Food Co-op.</p>

<p>To top it all off, Eastside Food Co-op <a href="http://www.eastsidefood.coop/content/photos-efcs-solar-project">has gone solar</a>!  Their solar panels began operating on December 8 and have generated over 160 killowat hours so far (see chart below).  At at time when the Minnesota Legislature is considering nuclear power expansion, I am proud to belong to an organization that is investing in clean solar energy.</p>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/Eastside_Solar_Log.png"><img alt="Eastside_Solar_Log.png" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2011/01/Eastside_Solar_Log-thumb-400x264-66513.png" width="400" height="264" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>]]>
        
    </content>
</entry>

<entry>
    <title>Anniversary trip: Lake Pepin and Zumbro River</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2010/10/anniversary_trip_pepin_zumbro.html" />
    <id>tag:blog.lib.umn.edu,2010:/moor0554/canoemoore//5042.256563</id>

    <published>2010-10-23T17:51:19Z</published>
    <updated>2010-10-24T19:54:42Z</updated>

    <summary> Amy and I celebrated our eighth anniversary with a trip to southeastern Minnesota. The forecast called for warm and sunny weather, so we decided to camp and canoe. We wanted to camp at Frontenac State Park to get some...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Personal" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<a href="http://blog.lib.umn.edu/moor0554/canoemoore/00000026.JPG"><img alt="00000026.JPG" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2010/10/00000026-thumb-200x132-60250.jpg" width="200" height="132" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a>

<p>Amy and I celebrated our eighth anniversary with a trip to southeastern Minnesota.  The forecast called for warm and sunny weather, so we decided to camp and canoe.  We wanted to camp at <a href="http://www.dnr.state.mn.us/state_parks/frontenac/index.html">Frontenac State Park</a> to get some more mileage out of our state park pass, but the fall colors and warm weather helped fill up Frontenac's campground.  One of the park rangers recommended <a href="http://ci.lake-city.mn.us/index.asp?Type=B_BASIC&SEC={94B70C3E-5FD1-4B74-A896-0CA191051A38}">Hok-Si-La Campground</a> in Lake City.  It was a fantastic campground with well-kept facilities and campsites right on <a href="http://www.wikimapia.org/#lat=44.4711308&lon=-92.2883534&z=11&l=0&m=b">Lake Pepin's</a> shore.  During breakfast in our campsite we saw several species of birds, including a bald eagle and a downy woodpecker.</p>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/00000014.JPG"><img alt="00000014.JPG" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2010/10/00000014-thumb-200x132-60252.jpg" width="200" height="132" class="mt-image-left" style="float: left; margin: 0 20px 20px 0;" /></a>

<p>For our canoe trip, we chose a section of the <a href="http://files.dnr.state.mn.us/maps/canoe_routes/zumbro.pdf">Zumbro River</a> from <a href="http://www.wikimapia.org/#lat=44.2886994&lon=-92.1860433&z=15&l=0&m=b">Theillman</a> to <a href="http://www.wikimapia.org/#lat=44.3372095&lon=-92.0772099&z=16&l=0&m=s">river mile 13</a> near Dumfries.  We chose that route because much of it is protected as part of the Richard J. Dorer Memorial Hardwood State Forest.  <a href="http://www.riverlandoutfitters.com/">Riverland Outfitters</a> shuttled us to the put-in.  A month before our trip, <a href="http://www.startribune.com/local/103798374.html">flooding devastated towns along the Zumbro River</a>.  Although the waters had receded well below flood stage, the river was still running at a brisk pace.  It took us about six hours to cover 13 river miles on the <a href="http://blog.lib.umn.edu/moor0554/canoemoore/2008/04/spring_break_canoe_trip.html">Buffalo</a> and <a href="http://blog.lib.umn.edu/moor0554/canoemoore/2009/09/nemadji_river_canoe_trip.html">Nemadji</a> Rivers, but it only took about three hours on the Zumbro.  We enjoyed the views of the hillsides and farms, the sand bars, and dodging all the submerged trees in the river.  According to <a href="http://www.comm.media.state.mn.us/bookstore/mnbookstore.asp?page=viewbook&BookID=69334&stocknum=1005">Paddling Minnesota</a>, the Zumbro derives its name from the French pronunciation of "embarrassment" caused by the river's obstacles.</p>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/00000006.JPG"><img alt="00000006.JPG" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2010/10/00000006-thumb-200x132-60248.jpg" width="200" height="132" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a>

<p>After getting off the water, we walked around downtown <a href="http://www.wikimapia.org/#lat=44.3837472&lon=-92.0393372&z=12&l=0&m=b">Wabasha</a> before heading across the river to <a href="http://www.wikimapia.org/#lat=44.4413791&lon=-92.1466255&z=13&l=0&m=b">Pepin, Wisconsin</a>, for an anniversary dinner at the <a href="http://www.harborviewpepin.com/">Harbor View Cafe</a>.  The cafe was hopping.  It took about two hours to get a table.  We didn't mind because it gave us a chance to walk around the harbor and listen to some live jazz and folk music outside the pub next door.  Harbor View Cafe was overpriced for the quality of the food and service, but the overall experience of visiting and dining in Pepin made it worthwhile.  The great company and occasion made for a memorable experience.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Urban canoeing: Lake Phalen to Gervais Lake</title>
    <link rel="alternate" type="text/html" href="http://blog.lib.umn.edu/moor0554/canoemoore/2010/10/urban_canoeing_phalen_gervais.html" />
    <id>tag:blog.lib.umn.edu,2010:/moor0554/canoemoore//5042.256533</id>

    <published>2010-10-23T00:43:37Z</published>
    <updated>2010-10-23T16:17:20Z</updated>

    <summary> Here are some pictures from a nice little canoeing trip we took with our friend, Jim. He owns a beautiful wood canvas canoe. The three of us became friends at YMCA Camp Widjiwagan in Ely, where wood canvas canoes...</summary>
    <author>
        <name>Christopher Moore</name>
        
    </author>
    
        <category term="Personal" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.lib.umn.edu/moor0554/canoemoore/">
        <![CDATA[<a href="http://blog.lib.umn.edu/moor0554/canoemoore/Phalen_Gervais%20%282%29.jpg"><img alt="Phalen_Gervais (2).jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2010/10/Phalen_Gervais (2)-thumb-150x200-60212.jpg" width="150" height="200" class="mt-image-left" style="float: left; margin: 0 20px 20px 0;" /></a>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/Phalen_Gervais%20%286%29.jpg"><img alt="Phalen_Gervais (6).jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2010/10/Phalen_Gervais (6)-thumb-200x150-60214.jpg" width="200" height="150" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a>

<p>Here are some pictures from a nice little canoeing trip we took with our friend, Jim.  He owns a beautiful wood canvas canoe.  The three of us became friends at <a href="http://www.widji.org/">YMCA Camp Widjiwagan</a> in Ely, where wood canvas canoes are used as part of the curriculum to teach young people about teamwork and environmental stewardship.  In addition to being easy on the eye, wood canvas canoes are very quiet on the water--much quieter than Scrappy, our aluminum canoe.</p>

<a href="http://blog.lib.umn.edu/moor0554/canoemoore/Phalen_Gervais%20%280%29.jpg"><img alt="Phalen_Gervais (0).jpg" src="http://blog.lib.umn.edu/moor0554/canoemoore/assets_c/2010/10/Phalen_Gervais (0)-thumb-150x200-60210.jpg" width="150" height="200" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a>

<p>It was nice to spend some time in the <a href="http://wikimapia.org/75761/Payne-Phalen-neighborhood">Payne-Phalen neighborhood of Saint Paul</a>.  We hardly make it over there.  We put in at <a href="http://www.wikimapia.org/#lat=44.9941376&lon=-93.0593598&z=17&l=0&m=b">Lake Phalen</a>, padded through <a href="http://www.wikimapia.org/#lat=44.9907915&lon=-93.0597031&z=17&l=0&m=b">Phalen Park</a>, portaged around a bridge repair project to <a href="http://www.wikimapia.org/#lat=44.9935458&lon=-93.0624175&z=17&l=0&m=b">Round Lake</a>, paddled along a scenic creek leading to <a href="http://www.wikimapia.org/#lat=45.0068523&lon=-93.0614519&z=16&l=0&m=b">Keller Lake</a>, and then paddled under Highway 36 into <a href="http://www.wikimapia.org/#lat=45.0173649&lon=-93.0703783&z=15&l=0&m=b">Gervais Lake</a>.  It was getting dark, so we didn't spend much time on Gervais Lake before heading back to the put-in.  People gush about the Minneapolis chain of lakes, but the Phalen-Gervais chain of lakes is quite nice, too.  Some highlights: water fowl, families enjoying the park, ice cream truck, many bridges, kayakers practicing rolling, fall leaves, quiet canoe, spending time with a good friend.</p>
]]>
        
    </content>
</entry>

</feed>
