Skip to content

Commit

Permalink
Use "regression" instead of "hedonic".
Browse files Browse the repository at this point in the history
  • Loading branch information
jiffyclub committed Apr 25, 2014
1 parent 01a3dc9 commit feb5b78
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 24 deletions.
2 changes: 1 addition & 1 deletion urbansim/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
from .hedonic import HedonicModel, HedonicModelGroup
from .regression import RegressionModel, RegressionModelGroup
from .lcm import LocationChoiceModel
16 changes: 8 additions & 8 deletions urbansim/models/hedonic.py → urbansim/models/regression.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def predict(df, filters, model_fit, ytransform=None):
return pd.Series(sim_data, index=df.index)


class HedonicModel(object):
class RegressionModel(object):
"""
A hedonic (regression) model with the ability to store an
estimated model and predict new data based on the model.
Expand Down Expand Up @@ -103,7 +103,7 @@ def __init__(self, fit_filters, predict_filters, model_expression,
self.predict_filters = predict_filters
self.model_expression = model_expression
self.ytransform = ytransform
self.name = name or 'HedonicModel'
self.name = name or 'RegressionModel'
self.model_fit = None

def fit_model(self, data):
Expand Down Expand Up @@ -150,9 +150,9 @@ def predict(self, data):
data, self.predict_filters, self.model_fit, self.ytransform)


class HedonicModelGroup(object):
class RegressionModelGroup(object):
"""
Manages a group of hedonic models that refer to different segments
Manages a group of regression models that refer to different segments
within a single table.
Model names must match the segment names after doing a Pandas groupby.
Expand All @@ -169,11 +169,11 @@ def __init__(self, segmentation_col):

def add_model(self, model):
"""
Add a `HedonicModel` instance.
Add a `RegressionModel` instance.
Parameters
----------
model : `HedonicModel`
model : `RegressionModel`
Should have a ``.name`` attribute matching one of
the groupby segments.
Expand All @@ -183,7 +183,7 @@ def add_model(self, model):
def add_model_from_params(self, name, fit_filters, predict_filters,
model_expression, ytransform=None):
"""
Add a model by passing arguments through to `HedonicModel`.
Add a model by passing arguments through to `RegressionModel`.
Parameters
----------
Expand All @@ -205,7 +205,7 @@ def add_model_from_params(self, name, fit_filters, predict_filters,
By default no transformation is applied.
"""
model = HedonicModel(
model = RegressionModel(
fit_filters, predict_filters, model_expression, ytransform, name)
self.models[name] = model

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from statsmodels.regression.linear_model import RegressionResultsWrapper

from .. import hedonic
from .. import regression
from ...exceptions import ModelEvaluationError


Expand All @@ -25,15 +25,15 @@ def groupby_df(test_df):
def test_fit_model(test_df):
filters = []
model_exp = 'col1 ~ col2'
fit = hedonic.fit_model(test_df, filters, model_exp)
fit = regression.fit_model(test_df, filters, model_exp)
assert isinstance(fit, RegressionResultsWrapper)


def test_predict(test_df):
filters = ['col1 in [0, 2, 4]']
model_exp = 'col1 ~ col2'
fit = hedonic.fit_model(test_df, filters, model_exp)
predicted = hedonic.predict(
fit = regression.fit_model(test_df, filters, model_exp)
predicted = regression.predict(
test_df.query('col1 in [1, 3]'), None, fit)
expected = pd.Series([1., 3.], index=['b', 'd'])
pdt.assert_series_equal(predicted, expected)
Expand All @@ -43,8 +43,8 @@ def test_predict_ytransform(test_df):
yt = lambda x: x / 2.
filters = ['col1 in [0, 2, 4]']
model_exp = 'col1 ~ col2'
fit = hedonic.fit_model(test_df, filters, model_exp)
predicted = hedonic.predict(
fit = regression.fit_model(test_df, filters, model_exp)
predicted = regression.predict(
test_df.query('col1 in [1, 3]'), None, fit, ytransform=yt)
expected = pd.Series([0.5, 1.5], index=['b', 'd'])
pdt.assert_series_equal(predicted, expected)
Expand All @@ -55,21 +55,21 @@ def test_predict_with_nans():
{'col1': range(5),
'col2': [5, 6, pd.np.nan, 8, 9]},
index=['a', 'b', 'c', 'd', 'e'])
fit = hedonic.fit_model(df.loc[['a', 'b', 'e']], None, 'col1 ~ col2')
fit = regression.fit_model(df.loc[['a', 'b', 'e']], None, 'col1 ~ col2')

with pytest.raises(ModelEvaluationError):
hedonic.predict(
regression.predict(
df.loc[['c', 'd']], None, fit)


def test_HedonicModel(test_df):
def test_RegressionModel(test_df):
fit_filters = ['col1 in [0, 2, 4]']
predict_filters = ['col1 in [1, 3]']
model_exp = 'col1 ~ col2'
ytransform = lambda x: x / 2.
name = 'test hedonic'

model = hedonic.HedonicModel(
model = regression.RegressionModel(
fit_filters, predict_filters, model_exp, ytransform, name)
assert model.fit_filters == fit_filters
assert model.predict_filters == predict_filters
Expand All @@ -91,17 +91,17 @@ def test_HedonicModel(test_df):
pdt.assert_series_equal(predicted, expected)


def test_HedonicModelGroup(groupby_df):
def test_RegressionModelGroup(groupby_df):
model_exp = 'col1 ~ col2'

hmg = hedonic.HedonicModelGroup('group')
hmg = regression.RegressionModelGroup('group')

xmodel = hedonic.HedonicModel(None, None, model_exp, name='x')
xmodel = regression.RegressionModel(None, None, model_exp, name='x')
hmg.add_model(xmodel)
assert isinstance(hmg.models['x'], hedonic.HedonicModel)
assert isinstance(hmg.models['x'], regression.RegressionModel)

hmg.add_model_from_params('y', None, None, model_exp)
assert isinstance(hmg.models['y'], hedonic.HedonicModel)
assert isinstance(hmg.models['y'], regression.RegressionModel)
assert hmg.models['y'].name == 'y'

fits = hmg.fit_models(groupby_df)
Expand Down

0 comments on commit feb5b78

Please sign in to comment.