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')