t509blog

Putting IRT into Context

I found myself wondering what alternatives there are to item response theory (IRT). I soon discovered that IRT falls under the blanket of Pyschometrics along with a number of other theories, and so I thought it might be interesting to map them out.

Once again, I wrote a python script to generate this chart. You can take a look at the code below:

import pygraphviz as pgv
import pdb
import sys

textfile = 'diagram3'
title = 'Psychometrics: IRT in context'

#Read through all the lines.
nodes = ['Pyschometrics',\
'Field of Study',\
'Psychological\nMeasurement',\
'Skills',\
'Knowledge',\
'Abilities',\
'Attitudes',\
'Personality\nTraits',\
'Educational\nAchievement',\
'Classical\nTest Theory',\
'Item Response Theory',\
'The Rasch\nModel',\
'Latent\nTrait Theory',\
'Strong True\nScore Theory',\
'Modern Mental\nTest Theory']
edges = [['Pyschometrics','Field of Study','is a              '],\
['Psychological\nMeasurement','Skills','evaluates      '],\
['Psychological\nMeasurement','Knowledge','evaluates      '],\
['Psychological\nMeasurement','Abilities','evaluates      '],\
['Psychological\nMeasurement','Personality\nTraits','evaluates      '],\
['Psychological\nMeasurement','Attitudes','evaluates      '],\
['Psychological\nMeasurement','Educational\nAchievement','evaluates   '],\
['Classical\nTest Theory','Psychological\nMeasurement','is a technique for                             '],\
['Item Response Theory','Psychological\nMeasurement','is a technique for   '],\
['The Rasch\nModel','Psychological\nMeasurement','is a technique for            '],\
['Item Response Theory','Latent\nTrait Theory','is also known as         '],\
['Item Response Theory','Strong True\nScore Theory','is also known as        '],\
['Item Response Theory','Modern Mental\nTest Theory','is also known as         '],\
['Item Response Theory','Classical\nTest Theory','outperforms'],\
['The Rasch\nModel','Item Response Theory','is a special case of     '],\
['Pyschometrics','Item Response Theory','encompasses               '],\
['Pyschometrics','Classical\nTest Theory','encompasses'],\
['Pyschometrics','The Rasch\nModel','encompasses              ']]


#Weed out all non unique edges
unique_edges = []
for x in edges:
    if x not in unique_edges:
        unique_edges.append(x)      

#Weed out all non unique nodes
unique_nodes = []
for x in nodes:
    if x not in unique_nodes:
        unique_nodes.append(x) 


print nodes
print edges

#make the graph
G=pgv.AGraph()
G=pgv.AGraph(strict=False,directed=True)

G.add_nodes_from(nodes)

for edge in edges:
    G.add_edge(edge[0],edge[1],label=edge[2])

sorted(G.edges(keys=False))

G.graph_attr['label']=title
G.graph_attr['labelloc']='t'
G.graph_attr['overlap']='false'
G.node_attr['shape']='oval'

s=G.string()
G.write(textfile+".dot")

G.layout(prog = 'dot')
G.draw(textfile+'.png')