Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added a telework (work at home) submodel to the IndividualPersonDayPatternModel #314

Open
mabcal opened this issue Dec 29, 2021 · 4 comments

Comments

@mabcal
Copy link
Contributor

mabcal commented Dec 29, 2021

This was implemented for SACOG re-estimation.

A binary choice model predicts whether the person works at home for more than a certain threshold of hours during the day, and then that choice is used to affect tour and trip rates by purpose using new variables added in the IndividualPersonDayPattern PersonExactNumberOfTours and IntermediateStopGeneration models.

There are several new configuration settings....

UseWorkAtHomeModelAndVariables.

This is False be default to be backwards-compatible, but setting it to True causes the new model to be used.

WorkAtHome_DurationThreshold=2.5

This corresponds to the threshold number of hours that is considered to be a "work at home" day in survey data. (Although the model was estimated outside of DaySim, the threshold is used in the code for consistency. The default value is 2.5 hours. This was chosen for SACOG because it was found that in 2018, about 65% of workers who worked at home less than that amount made commute tours on the day, while only about 35% of workers who worked at home more than that duration made commute tours, so this variable has a large affect on the probability of making a commute tour.

Below are the coefficients from an estimated binary logit model. We do not have data on the person's industry or occupation, so the fraction of jobs in various employment sectors at the person's work location parcel are used instead. The employment types that generally required people to be at work (in 2018) show a lower probability of working at home.

WorkAtHome_AlternativeSpecificConstant=-1.300
WorkAtHome_PartTimeWorkerCoefficient=-0.363
WorkAtHome_Income25to50Coefficient=-0.238
WorkAtHome_IncomeOver150Coefficient= 0.241
WorkAtHome_NonWorkerAndKidsInHHCoefficient=0.369
WorkAtHome_NoVehiclesInHHCoefficient=0.394
WorkAtHome_FractionEducationJobsCoefficient= -0.490
WorkAtHome_FractionFoodServiceJobsCoefficient=-2.416
WorkAtHome_FractionGovernmentJobsCoefficient=-0.883
WorkAtHome_FractionIndustrialJobsCoefficient=-0.405
WorkAtHome_FractionMedicalJobsCoefficient=-0.822
WorkAtHome_FractionOfficeJobsCoefficient=-0.380

These coefficients can be changed to "calibrate" the model to future telework scenarios. In particular, the WorkAtHome_AlternativeSpecificConstant can be made more positive for more working from home, and the negative effect for specific industry types can be made less negative if those job types in particular are hypothesized to allow more teleworking in future scenarios - particulary Government and Office. There is also a key coefficient 134 W-wkathome added to the IndividualPersonDayPattern model that has a large negative effect for working at home on making commute tours - this could also be made stronger for future scenarios.

@mabcal
Copy link
Contributor Author

mabcal commented Dec 29, 2021

More on this - the output choice is written to the wkathome field on the person-day output file. A value >0 (set to the threshold +2 and rounded) indicates that the person works at home for more than the threshold duration. For the base SACOG survey application, the model predicts that about 13% of workers do this, which is the same as in the survey data used to estimate the model.

@stefancoe
Copy link
Contributor

stefancoe commented Aug 25, 2023

@mabcal @nsdhakar When testing this functionality at PSRC, I noticed the changing the alternative specific constant did nothing to the results. Debugging the code, it seems like the utility terms are not being being added to the model because the ChoiceProbablityCalculator looks for the coefficient numbered 20, does not find it and exits the AddUtilityTerm function before it can assign 'value' (which is the passed in utility term). Looking at the rest of the code in this function, I am not sure that value would ever get assigned properly since the subsequent code also needs the coefficient variable to not be null.

@mabcal
Copy link
Contributor Author

mabcal commented Aug 25, 2023

There needs to be a coefficient 20 in the IndividualDayPatternModel coefficient file with coefficient 1.0...it looks like

20 X-WKATHOME T 1.0 0

@stefancoe
Copy link
Contributor

Thanks- that worked!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants