diff --git a/src/main/java/simpaths/data/Parameters.java b/src/main/java/simpaths/data/Parameters.java index 114eb468c..a8b461cd1 100644 --- a/src/main/java/simpaths/data/Parameters.java +++ b/src/main/java/simpaths/data/Parameters.java @@ -405,7 +405,7 @@ else if(numberOfChildren <= 5) { //Uprating factor private static boolean flagDefaultToTimeSeriesAverages; private static Double averageSavingReturns, averageDebtCostLow, averageDebtCostHigh; - private static MultiKeyCoefficientMap upratingIndexMapRealGDP, mapRealGDPperCapita, upratingIndexMapInflation, socialCareProvisionTimeAdjustment, + private static MultiKeyCoefficientMap upratingIndexMapRealGDP, mapRealGDPperCapita, upratingIndexMapInflation, partnershipTimeAdjustment, studentsTimeAdjustment, fertilityTimeAdjustment, utilityTimeAdjustmentSingleMales, utilityTimeAdjustmentACMales, utilityTimeAdjustmentSingleFemales, utilityTimeAdjustmentACFemales, utilityTimeAdjustmentCouples, utilityTimeAdjustmentSingleDepMen, utilityTimeAdjustmentSingleDepWomen, @@ -2469,7 +2469,6 @@ public static void loadTimeSeriesFactorMaps(Country country) { upratingIndexMapRealGDP = ExcelAssistant.loadCoefficientMap(Parameters.getInputDirectory() + "time_series_factor.xlsx", country.toString() + "_gdp", 1, 1); upratingIndexMapInflation = ExcelAssistant.loadCoefficientMap(Parameters.getInputDirectory() + "time_series_factor.xlsx", country.toString() + "_inflation", 1, 1); upratingIndexMapRealWageGrowth = ExcelAssistant.loadCoefficientMap(Parameters.getInputDirectory() + "time_series_factor.xlsx", country.toString() + "_wage_growth", 1, 1); - socialCareProvisionTimeAdjustment = ExcelAssistant.loadCoefficientMap(Parameters.getInputDirectory() + "time_series_factor.xlsx", country.toString() + "_care_adjustment", 1, 1); partnershipTimeAdjustment = ExcelAssistant.loadCoefficientMap(Parameters.getInputDirectory() + "time_series_factor.xlsx", country.toString() + "_cohabitation_adjustment", 1, 1); studentsTimeAdjustment = ExcelAssistant.loadCoefficientMap(Parameters.getInputDirectory() + "time_series_factor.xlsx", country.toString() +"_students_adjustment", 1, 1); fertilityTimeAdjustment = ExcelAssistant.loadCoefficientMap(Parameters.getInputDirectory() + "time_series_factor.xlsx", country.toString() + "_fertility_adjustment", 1, 1); @@ -2574,9 +2573,6 @@ private static MultiKeyCoefficientMap getTimeSeriesValueMap(TimeSeriesVariable t case CarerWageRate -> { map = wageRateFormalSocialCare; } - case CareProvisionAdjustment -> { - map = socialCareProvisionTimeAdjustment; - } case PartnershipAdjustment -> { map = partnershipTimeAdjustment; } diff --git a/src/main/java/simpaths/data/startingpop/DataParser.java b/src/main/java/simpaths/data/startingpop/DataParser.java index af0a16ba6..8ad601374 100644 --- a/src/main/java/simpaths/data/startingpop/DataParser.java +++ b/src/main/java/simpaths/data/startingpop/DataParser.java @@ -225,10 +225,6 @@ private static void parse(String inputFileLocation, String inputFileName, Connec + "ALTER TABLE " + personTable + " ALTER COLUMN financial_distress_add RENAME TO yFinDstrssFlag;" //Social care - + "ALTER TABLE " + personTable + " ADD careProvidedFlag VARCHAR_IGNORECASE;" - + "UPDATE " + personTable + " SET careProvidedFlag = 'None' WHERE careHrsProvidedWeek <= 0 OR careHrsProvidedWeek IS NULL;" - + "UPDATE " + personTable + " SET careProvidedFlag = 'OnlyOther' WHERE careHrsProvidedWeek > 0;" - //SYSTEM : Year + "ALTER TABLE " + personTable + " ALTER COLUMN statInterviewYear RENAME TO system_year;" diff --git a/src/main/java/simpaths/model/BenefitUnit.java b/src/main/java/simpaths/model/BenefitUnit.java index daaa5e612..44ababff5 100644 --- a/src/main/java/simpaths/model/BenefitUnit.java +++ b/src/main/java/simpaths/model/BenefitUnit.java @@ -86,7 +86,6 @@ public class BenefitUnit implements EventListener, IDoubleSource, Weight, Compar @Lag(getter = "getNumberChildrenAll") @Transient private Integer numberChildrenAll_lag1; //Lag(1) of the number of children of all ages in the household @NullInitialised private Double xChildCareWeek; @NullInitialised private Double xCareWeek; - @NullInitialised private Integer careProvidedFlag; @NullInitialised private Long idtaxDbDonor; @NullInitialised @Transient private Match demDbMatchTax; @Enumerated(EnumType.STRING) private Region region; //Region of household. Also used in findDonorHouseholdsByLabour method @@ -204,7 +203,6 @@ public BenefitUnit(Long id, long statSeed) { this.dem4to12L1 = Indicator.False; this.xChildCareWeek = 0.0; this.xCareWeek = 0.0; - this.careProvidedFlag = 0; this.yDispMonth = 0.; this.yGrossMonth = 0.; this.yDispEquivYear = 0.; @@ -301,7 +299,6 @@ public BenefitUnit(BenefitUnit originalBenefitUnit, long benefitUnitInnov, Sampl this.dem4to12L1 = originalBenefitUnit.dem4to12L1; this.xChildCareWeek = originalBenefitUnit.xChildCareWeek; this.xCareWeek = originalBenefitUnit.xCareWeek; - this.careProvidedFlag = originalBenefitUnit.careProvidedFlag; this.region = originalBenefitUnit.region; this.yHhQuintilesMonthC5 = originalBenefitUnit.getYdses_c5(); this.yHhQuintilesMonthC5L1 = originalBenefitUnit.yHhQuintilesMonthC5L1; @@ -587,10 +584,13 @@ private TaxEvaluation taxWrapper(double hoursWorkedPerWeekM, double hoursWorkedP } xCareWeek = 0.0; - careProvidedFlag = 0; double socialCareCostPerMonth = 0.0; + int careProvided = 0; if (Parameters.flagSocialCare && !Parameters.flagSuppressSocialCareCosts) { - updateSocialCareProvision(); + for (Person person : getMembers()) { + if (person.getCareHrsProvidedWeek() > 0.01) + careProvided = 1; + } updateSocialCareCostPerWeek(); socialCareCostPerMonth = xCareWeek * Parameters.WEEKS_PER_MONTH; } @@ -605,7 +605,7 @@ private TaxEvaluation taxWrapper(double hoursWorkedPerWeekM, double hoursWorkedP double taxInnov = (Parameters.donorPoolAveraging) ? -1.0 : statInnovations.getDoubleDraw(8); evaluatedTransfers = new TaxEvaluation(model.getYear(), getRefPersonForDecisions().getDemAge(), getIntValue(Regressors.NumberMembersOver17), getIntValue(Regressors.NumberChildren04), getIntValue(Regressors.NumberChildren59), getIntValue(Regressors.NumberChildren1017), - hoursWorkedPerWeekM, hoursWorkedPerWeekF, dlltsdM, dlltsdF, careProvidedFlag, originalIncomePerMonth, secondIncomePerMonth, + hoursWorkedPerWeekM, hoursWorkedPerWeekF, dlltsdM, dlltsdF, careProvided, originalIncomePerMonth, secondIncomePerMonth, childcareCostPerMonth, socialCareCostPerMonth, getLiquidWealth(Parameters.enableIntertemporalOptimisations), taxInnov); return evaluatedTransfers; @@ -4680,14 +4680,6 @@ private void updateSocialCareCostPerWeek() { } } - private void updateSocialCareProvision() { - - careProvidedFlag = 0; - for (Person person : getMembers()) { - if (!SocialCareProvision.None.equals(person.getSocialCareProvision())) - careProvidedFlag = 1; - } - } public void setDeh_c4Local(Education edu) { i_eduHighestC4 = edu; diff --git a/src/main/java/simpaths/model/Person.java b/src/main/java/simpaths/model/Person.java index c1585c860..ad92b1a73 100644 --- a/src/main/java/simpaths/model/Person.java +++ b/src/main/java/simpaths/model/Person.java @@ -98,8 +98,6 @@ public class Person implements EventListener, IDoubleSource, IIntSource, Weight, @NullInitialised @Transient private Boolean careFormalFlag; @NullInitialised @Transient private Boolean careFromInformalFlag; @Column(name="careHrsProvidedWeek") private Double careHrsProvidedWeek; - @Enumerated(EnumType.STRING) @Column(name="careProvidedFlag") private SocialCareProvision careProvidedFlag; - @Lag(field="careProvidedFlag") @Transient private SocialCareProvision careProvidedFlagL1; @Lag(field="careNeedFlag") @Transient private Indicator careNeedFlagL1; @Lag(field="careHrsFormalWeek") @Transient private Double careHrsFormalWeekL1; @Lag(field="careHrsProvidedWeek") @Transient private Double careHrsProvidedWeekL1; @@ -445,14 +443,11 @@ else if (demAge > Parameters.MAX_AGE_TO_STAY_IN_CONTINUOUS_EDUCATION) } careHrsProvidedWeek = Objects.requireNonNullElse(originalPerson.careHrsProvidedWeek, 0.0); - careProvidedFlag = Objects.requireNonNullElseGet(originalPerson.careProvidedFlag, () -> - (careHrsProvidedWeek > 0.01) ? SocialCareProvision.OnlyOther : SocialCareProvision.None); careNeedFlagL1 = Objects.requireNonNullElse(originalPerson.careNeedFlagL1, careNeedFlag); careHrsFormalWeekL1 = Objects.requireNonNullElse(originalPerson.careHrsFormalWeekL1, careHrsFormalWeek); careHrsInformalWeekL1 = Objects.requireNonNullElse(originalPerson.careHrsInformalWeekL1, careHrsInformalWeek); careHrsProvidedWeekL1 = Objects.requireNonNullElse(originalPerson.careHrsProvidedWeekL1, careHrsProvidedWeek); - careProvidedFlagL1 = Objects.requireNonNullElse(originalPerson.careProvidedFlagL1, careProvidedFlag); labWageOfferLowFlag = originalPerson.labWageOfferLowFlag; labWageOfferLowFlagL1 = originalPerson.labWageOfferLowFlagL1; @@ -559,7 +554,7 @@ public Person(Long id, long statSeed) { // initialise random draws this.statSeed = statSeed; - statInnovations = new Innovations(37, 1, 1, statSeed); + statInnovations = new Innovations(38, 1, 1, statSeed); //Draw desired age and wage differential for parametric partnership formation for people above age to get married: double[] sampleDifferentials = setMarriageTargets(); @@ -601,12 +596,10 @@ private void setAllSocialCareVariablesToFalse() { careReceivedFlag = SocialCareReceipt.None; careFormalFlag = false; careFromInformalFlag = false; - careProvidedFlag = SocialCareProvision.None; careNeedFlagL1 = Indicator.False; careHrsFormalWeekL1 = -9.0; careHrsInformalWeekL1 = -9.0; careHrsProvidedWeekL1 = -9.0; - careProvidedFlagL1 = SocialCareProvision.None; } public void setAdditionalFieldsInInitialPopulation() { @@ -678,7 +671,6 @@ public void setAdditionalFieldsInInitialPopulation() { careHrsFormalWeekL1 = careHrsFormalWeek; careHrsInformalWeekL1 = careHrsInformalWeek; careHrsProvidedWeekL1 = careHrsProvidedWeek; - careProvidedFlagL1 = careProvidedFlag; labWageOfferLowFlagL1 = getLowWageOffer(); eduHighestC4L1 = eduHighestC4; //Update lag(1) of education level eduSpellFlagL1 = eduSpellFlag ; //Update lag(1) of education level @@ -853,7 +845,7 @@ public void onEvent(Enum type) { evaluateSocialCareReceipt(); } case SocialCareProvision -> { - evaluateSocialCareProvision(); + evaluateSocialCareProvision(0.0); } case HealthMentalHM1 -> { healthMentalHM1Level(); @@ -1489,7 +1481,7 @@ protected void evaluateSocialCareReceipt() { double score = Parameters.getRegInformalCareHoursS2d().getScore(this,Person.DoublesVariables.class); double rmse = Parameters.getRMSEForRegression("S2d"); double gauss = Parameters.getStandardNormalDistribution().inverseCumulativeProbability(statInnovations.getDoubleDraw(12)); - double informalHours = Math.min(Parameters.MAX_HOURS_WEEKLY_INFORMAL_CARE, Math.exp(score + rmse * gauss)); + double informalHours = Math.min(Parameters.MAX_HOURS_WEEKLY_INFORMAL_CARE, Math.sinh(score + rmse * gauss)); careFromInformalFlag = true; careHrsInformalWeek = informalHours; @@ -1562,7 +1554,7 @@ protected void evaluateSocialCareReceipt() { double score = Parameters.getRegFormalCareHoursS2e().getScore(this,Person.DoublesVariables.class); double rmse = Parameters.getRMSEForRegression("S2e"); double gauss = Parameters.getStandardNormalDistribution().inverseCumulativeProbability(statInnovations.getDoubleDraw(13)); - careHrsFormalWeek = Math.min(Parameters.MAX_HOURS_WEEKLY_FORMAL_CARE, Math.exp(score + rmse * gauss)); + careHrsFormalWeek = Math.min(Parameters.MAX_HOURS_WEEKLY_FORMAL_CARE, Math.sinh(score + rmse * gauss)); careFormalX = careHrsFormalWeek * Parameters.getTimeSeriesValue(model.getYear(), TimeSeriesVariable.CarerWageRate); // Retired process (kept for future reuse): S2k formal care hours. @@ -1576,23 +1568,12 @@ protected void evaluateSocialCareReceipt() { careFormalX = 0.0; } - protected void evaluateSocialCareProvision() { - evaluateSocialCareProvision(Parameters.getTimeSeriesValue(model.getYear(),TimeSeriesVariable.CareProvisionAdjustment)); - } - public void evaluateSocialCareProvision(double probitAdjustment) { - careProvidedFlag = SocialCareProvision.None; careHrsProvidedWeek = 0.0; if (demAge >= Parameters.MIN_AGE_TO_PROVIDE_CARE) { Person partner = getPartner(); - boolean careToPartner = false; - double careHoursToPartner = 0.0; - if (partner != null && partner.careFromInformalFlag) { - careToPartner = true; - careHoursToPartner = partner.getCareHoursFromPartnerWeekly(); - } double probProvideAny; if (partner == null) { @@ -1605,7 +1586,7 @@ public void evaluateSocialCareProvision(double probitAdjustment) { double score = Parameters.getRegNoCarePartnerProvCareToOtherS3b().getScore(this, Person.DoublesVariables.class); probProvideAny = Parameters.getRegNoCarePartnerProvCareToOtherS3b().getProbability(score + probitAdjustment); } - boolean provideCare = (statInnovations.getDoubleDraw(13) < probProvideAny); + boolean provideCare = (statInnovations.getDoubleDraw(37) < probProvideAny); if (!Parameters.flagSuppressSocialCareCosts && provideCare) { double score; @@ -1622,20 +1603,7 @@ public void evaluateSocialCareProvision(double probitAdjustment) { rmse = Parameters.getRMSEForRegression("S3d"); } double gauss = Parameters.getStandardNormalDistribution().inverseCumulativeProbability(statInnovations.getDoubleDraw(14)); - careHrsProvidedWeek = Math.min(Parameters.MAX_HOURS_WEEKLY_INFORMAL_CARE, Math.exp(score + rmse * gauss)); - if (careToPartner) { - - if (careHrsProvidedWeek > careHoursToPartner) { - - careProvidedFlag = SocialCareProvision.PartnerAndOther; - } else { - - careProvidedFlag = SocialCareProvision.OnlyPartner; - } - } else { - - careProvidedFlag = SocialCareProvision.OnlyOther; - } + careHrsProvidedWeek = Math.min(Parameters.MAX_HOURS_WEEKLY_INFORMAL_CARE, Math.sinh(score + rmse * gauss)); } } } @@ -2501,12 +2469,6 @@ public enum DoublesVariables { CareMarketFormal_L1, CareMarketMixed, CareMarketMixed_L1, - CareToOtherOnly, - CareToOtherOnly_L1, - CareToPartnerAndOther, - CareToPartnerAndOther_L1, - CareToPartnerOnly, - CareToPartnerOnly_L1, Cohort, Constant, // For the constant (intercept) term of the regression Covid_D, @@ -3249,25 +3211,7 @@ public double getDoubleValue(Enum variableID) { return (partner != null && Indicator.True.equals(partner.getNeedSocialCare())) ? 1. : 0.; } case ProvideCare_L1 -> { - return (careProvidedFlagL1 != null && !SocialCareProvision.None.equals(careProvidedFlagL1)) ? 1. : 0.; - } - case CareToPartnerOnly -> { - return (SocialCareProvision.OnlyPartner.equals(careProvidedFlag)) ? 1. : 0.; - } - case CareToPartnerAndOther -> { - return (SocialCareProvision.PartnerAndOther.equals(careProvidedFlag)) ? 1. : 0.; - } - case CareToOtherOnly -> { - return (SocialCareProvision.OnlyOther.equals(careProvidedFlag)) ? 1. : 0.; - } - case CareToPartnerOnly_L1 -> { - return (SocialCareProvision.OnlyPartner.equals(careProvidedFlagL1)) ? 1. : 0.; - } - case CareToPartnerAndOther_L1 -> { - return (SocialCareProvision.PartnerAndOther.equals(careProvidedFlagL1)) ? 1. : 0.; - } - case CareToOtherOnly_L1 -> { - return (SocialCareProvision.OnlyOther.equals(careProvidedFlagL1)) ? 1. : 0.; + return (careHrsProvidedWeekL1 != null && careHrsProvidedWeekL1 > 0.0) ? 1. : 0.; } case ReceiveCare_L1 -> { return (getTotalHoursSocialCare_L1() > 0.01) ? 1. : 0.; @@ -5148,10 +5092,6 @@ public Long getPartnerID() { private void nullPartnerVariables() { demPartnerNYear = 0; - if (SocialCareProvision.OnlyPartner.equals(careProvidedFlag)) - careProvidedFlag = SocialCareProvision.None; - else if (SocialCareProvision.PartnerAndOther.equals(careProvidedFlag)) - careProvidedFlag = SocialCareProvision.OnlyOther; } public Labour getLabourSupplyWeekly() { @@ -5323,9 +5263,6 @@ public void setCareHoursFromOtherWeekly_lag1(double val) { public void setCareHoursFromFormalWeekly_lag1(double val) { careHrsFormalWeekL1 = val; } - public void setSocialCareProvision_lag1(SocialCareProvision careProvision) { - careProvidedFlagL1 = careProvision; - } public void setHealthWbScore0to36(Double healthWbScore0to36) { this.healthWbScore0to36 = healthWbScore0to36; @@ -5425,10 +5362,6 @@ public void setSocialCareReceipt(SocialCareReceipt who) { careReceivedFlag = who; } - public void setSocialCareProvision(SocialCareProvision who) { - careProvidedFlag = who; - } - public Indicator getDlltsd_lag1() { return healthDsblLongtermFlagL1; } @@ -5795,18 +5728,8 @@ else if (getHoursInformalSocialCare()<0.01) else return SocialCareReceiptState.Mixed; } - public double getSocialCareProvisionState() { -// double val = getSocialCareProvision().getValue(); -// if (demAge>DecisionParams.MAX_AGE_COHABITATION && val > 0.1 && val < 2.1) -// val = 3.0; - return (double)getSocialCareProvision().getValue(); - } - - public SocialCareProvision getSocialCareProvision() { - if (careProvidedFlag ==null) - return SocialCareProvision.None; - else - return careProvidedFlag; + public Double getCareHrsProvidedWeek() { + return careHrsProvidedWeek; } public double getRetired() { @@ -6216,12 +6139,6 @@ else if (getStudent()==0) else return RegressionName.PartnershipU1; } - case SocialCareProvision -> { - if (Dcpst.Partnered.equals(getDcpst())) - return RegressionName.SocialCareS3b; - else - return RegressionName.SocialCareS3a; - } case WagePotential -> { if (Gender.Male.equals(demMaleFlag)) return RegressionName.WagesMalesE; diff --git a/src/main/java/simpaths/model/SimPathsModel.java b/src/main/java/simpaths/model/SimPathsModel.java index 7939ca560..151320c5f 100644 --- a/src/main/java/simpaths/model/SimPathsModel.java +++ b/src/main/java/simpaths/model/SimPathsModel.java @@ -797,7 +797,6 @@ public enum Processes { EndYear, UnionMatching, LabourMarketAndIncomeUpdate, - SocialCareMarketClearing, //Alignment Processes FertilityAlignment, @@ -877,9 +876,6 @@ public void onEvent(Enum type) { } if (commentsOn) log.info("Union matching complete."); } - case SocialCareMarketClearing -> { - socialCareMarketClearing(); - } case FertilityAlignment -> { if (alignFertility) { @@ -1040,6 +1036,8 @@ private void screenForImperfectTaxDbMatches() { * PROCESS - POPULATION ALIGNMENT WHERE POPULATION IS WEIGHTED * */ + + private void populationAlignmentWeighted() { int maxAlignAge = Math.min(maxAge, Parameters.getPopulationProjectionsMaxAge()); @@ -1906,20 +1904,6 @@ private void evalMatches(Pair, Set> unmatched, boolean align } } - private void socialCareMarketClearing() { - - // adjust provision so that aggregate provision broadly matches aggregate receipt - double careProvisionAdjustment = Parameters.getTimeSeriesValue(getYear(),TimeSeriesVariable.CareProvisionAdjustment); - SocialCareAlignment socialCareAlignment = new SocialCareAlignment(persons, careProvisionAdjustment); - double[] startVal = new double[] {careProvisionAdjustment}; - double[] lowerBound = new double[] {careProvisionAdjustment - 1.5}; - double[] upperBound = new double[] {careProvisionAdjustment + 1.5}; - RootSearch search = new RootSearch(lowerBound, upperBound, startVal, socialCareAlignment, 1.0E-2, 0.001); - search.evaluate(); - if (search.isTargetAltered()) { - Parameters.putTimeSeriesValue(getYear(), search.getTarget()[0], TimeSeriesVariable.CareProvisionAdjustment); - } - } /* diff --git a/src/main/java/simpaths/model/SocialCareAlignment.java b/src/main/java/simpaths/model/SocialCareAlignment.java deleted file mode 100644 index 7781d5cc4..000000000 --- a/src/main/java/simpaths/model/SocialCareAlignment.java +++ /dev/null @@ -1,62 +0,0 @@ -package simpaths.model; - -import simpaths.data.IEvaluation; -import simpaths.data.Parameters; - -import java.util.Set; - - -public class SocialCareAlignment implements IEvaluation { - - private double aggregateCareReceived; - private double aggregateCareProvided; - private double careProvisionAdjustment; - boolean careProvisionAdjustmentChanged; - private int maturePopulation; - Set persons; - - public SocialCareAlignment(Set persons, double careProvisionAdjustment) { - this.persons = persons; - this.careProvisionAdjustment = careProvisionAdjustment; - aggregateCareReceived = evalAggregateCareReceived(); - } - - @Override - public double evaluate(double[] args) { - - if (Math.abs(args[0] - careProvisionAdjustment) > 1.0E-5) { - adjustCareProvision(args[0]); - } - aggregateCareProvided = evalAggregateCareProvided(); - return (aggregateCareReceived - aggregateCareProvided) / (double) maturePopulation; - } - - private double evalAggregateCareReceived() { - - double careReceived = 0.0; - maturePopulation = 0; - for (Person person : persons) { - - careReceived += person.getHoursInformalSocialCare(); - if (person.getDemAge() >= Parameters.AGE_TO_BECOME_RESPONSIBLE) - maturePopulation++; - } - return careReceived; - } - - private double evalAggregateCareProvided() { - double careProvided = 0.0; - for (Person person : persons) { - careProvided += person.getCareHoursProvidedWeekly(); - } - return careProvided; - } - - private void adjustCareProvision(double newCareProvisionAdjustment) { - for (Person person : persons) { - person.evaluateSocialCareProvision(newCareProvisionAdjustment); - } - careProvisionAdjustment = newCareProvisionAdjustment; - careProvisionAdjustmentChanged = true; - } -} diff --git a/src/main/java/simpaths/model/decisions/Axis.java b/src/main/java/simpaths/model/decisions/Axis.java index 64557cf46..c1061c651 100644 --- a/src/main/java/simpaths/model/decisions/Axis.java +++ b/src/main/java/simpaths/model/decisions/Axis.java @@ -19,7 +19,6 @@ public enum Axis { Health, Disability, SocialCareReceipt, - SocialCareProvision, Region, Student, Education, diff --git a/src/main/java/simpaths/model/decisions/Expectations.java b/src/main/java/simpaths/model/decisions/Expectations.java index e0c3429ec..88714c7ae 100644 --- a/src/main/java/simpaths/model/decisions/Expectations.java +++ b/src/main/java/simpaths/model/decisions/Expectations.java @@ -175,7 +175,6 @@ public Expectations(Expectations invariantExpectations) { personProxyThisPeriod.setDhe(currentStates.getHealthCode()); personProxyThisPeriod.setDeh_c4(currentStates.getEducationCode()); personProxyThisPeriod.setDcpstLocal(currentStates.getDcpst()); - personProxyThisPeriod.setSocialCareProvision(currentStates.getSocialCareProvisionCode()); personProxyThisPeriod.populateSocialCareReceipt(currentStates.getSocialCareReceiptStateCode()); // add person proxy for next period expectations @@ -194,7 +193,6 @@ public Expectations(Expectations invariantExpectations) { personProxyNextPeriod.setDhe(currentStates.getHealthCode()); personProxyNextPeriod.setDhe_lag1(currentStates.getHealthCode()); personProxyNextPeriod.populateSocialCareReceipt_lag1(currentStates.getSocialCareReceiptStateCode()); - personProxyNextPeriod.setSocialCareProvision_lag1(currentStates.getSocialCareProvisionCode()); personProxyNextPeriod.setDed(currentStates.getStudentIndicator()); personProxyNextPeriod.setDeh_c4(currentStates.getEducationCode()); personProxyNextPeriod.setDeh_c4_lag1(currentStates.getEducationCode()); @@ -237,13 +235,8 @@ public void updateForDiscreteControls(double emp1Pr, double emp2Pr) { //******************************************************** // care hours per week - double careHoursProvidedWeekly = 0.0; - int careProvision = 0; - if (Parameters.flagSocialCare) { - careHoursProvidedWeekly = evalSocialCareHoursProvidedWeekly(); - if (careHoursProvidedWeekly>1.0E-5) - careProvision = 1; - } + double careHoursProvidedWeekly = evalSocialCareHoursProvidedWeekly(); + int careProvision = (careHoursProvidedWeekly > 1.0E-5) ? 1 : 0; // labour and labour income in current period - to evaluate taxes and benefits double labourIncome1Weekly = 0.0; @@ -252,12 +245,6 @@ public void updateForDiscreteControls(double emp1Pr, double emp2Pr) { Integer labourHours1Weekly = null; Integer labourHours2Weekly = null; leisureTime = 1.0; - if (careHoursProvidedWeekly>0.0) { - if (cohabitation) - leisureTime -= careHoursProvidedWeekly / (2.0*Parameters.HOURS_IN_WEEK); - else - leisureTime -= careHoursProvidedWeekly / Parameters.HOURS_IN_WEEK; - } if (ageYearsThisPeriod <= DecisionParams.maxAgeFlexibleLabourSupply) { labourHours1Weekly = (int) Math.round(DecisionParams.FULLTIME_HOURS_WEEKLY * emp1Pr); hourlyWageRate1 = getHourlyWageRate(labourHours1Weekly); @@ -425,11 +412,6 @@ public void updateForDiscreteControls(double emp1Pr, double emp2Pr) { futures.updateSocialCareReceipt(); } - // social care provision - if (Parameters.flagSocialCare) { - futures.updateSocialCareProvision(); - } - // full-time wage potential if (ageYearsNextPeriod <= DecisionParams.maxAgeFlexibleLabourSupply) { futures.updateWagePotential(); @@ -496,21 +478,7 @@ private double evalSocialCareCostWeekly() { private double evalSocialCareHoursProvidedWeekly() { - double socialCareHoursProvidedWeekly = 0.0; - if (Parameters.flagSocialCare && !Parameters.flagSuppressSocialCareCosts) { - - SocialCareProvision status = currentStates.getSocialCareProvisionCode(); - if (!SocialCareProvision.None.equals(status)) { - // With S3e retired, no separate regression is used for hours provided in expectations. - socialCareHoursProvidedWeekly = 0.0; - - // Retired process (kept for future reuse): S3e provided care hours. - // double score = Parameters.getRegCareHoursProvS3e().getScore(personProxyThisPeriod,Person.DoublesVariables.class); - // double rmse = Parameters.getRMSEForRegression("S3e"); - // socialCareHoursProvidedWeekly = Math.min(80.0, Math.exp(score + rmse*rmse/2.0)); - } - } - return socialCareHoursProvidedWeekly; + return 0.0; } /** diff --git a/src/main/java/simpaths/model/decisions/ExpectationsFactory.java b/src/main/java/simpaths/model/decisions/ExpectationsFactory.java index 8601348b7..3f19dbc4a 100644 --- a/src/main/java/simpaths/model/decisions/ExpectationsFactory.java +++ b/src/main/java/simpaths/model/decisions/ExpectationsFactory.java @@ -34,7 +34,6 @@ public class ExpectationsFactory { boolean flagHealthVaries; boolean flagDisabilityVaries; boolean flagSocialCareReceiptVaries; - boolean flagSocialCareProvisionVaries; boolean flagCohabitationVaries; boolean flagChildrenVaries; @@ -263,11 +262,6 @@ public void updateSocialCareReceipt() { flagSocialCareReceiptVaries = true; } - public void updateSocialCareProvision() { - updateCommon(Axis.SocialCareProvision); - flagSocialCareProvisionVaries = true; - } - public void updateWagePotential() { updateCommon(Axis.WagePotential); } @@ -306,12 +300,6 @@ private LocalExpectations lexpectEval(Axis axis) { if (Axis.SocialCareReceipt.equals(axis)) { lexpectations = compileSocialCareReceiptProbs(); - } else if (Axis.SocialCareProvision.equals(axis)) { - - if (Dcpst.Partnered.equals(personProxyNextPeriod.getDcpst())) - lexpectations.evaluateDiscrete(personProxyNextPeriod, personProxyNextPeriod.getRegressionName(axis)); - else - lexpectations.evaluateLabelledIndicator(personProxyNextPeriod, personProxyNextPeriod.getRegressionName(axis), 3.0); } else if (Axis.WagePotential.equals(axis)) { lexpectations.evaluateGaussian(personProxyNextPeriod, personProxyNextPeriod.getRegressionName(axis), @@ -376,7 +364,7 @@ private LocalExpectations compileSocialCareReceiptProbs() { private boolean anyVaries() { if ( flagRegionVaries || flagEducationVaries || flagHealthVaries || flagDisabilityVaries || flagSocialCareReceiptVaries || - flagSocialCareProvisionVaries || flagCohabitationVaries || flagChildrenVaries ) + flagCohabitationVaries || flagChildrenVaries ) return true; else return false; @@ -406,10 +394,6 @@ private boolean updatePersonNextPeriod(int ii) { flagChange = updatePersonNextPeriod(anticipated[ii], Axis.SocialCareReceipt); if (flagChange) flagEval = true; } - if (flagSocialCareProvisionVaries) { - flagChange = updatePersonNextPeriod(anticipated[ii], Axis.SocialCareProvision); - if (flagChange) flagEval = true; - } if (flagCohabitationVaries) { flagChange = updatePersonNextPeriod(anticipated[ii], Axis.Cohabitation); if (flagChange) flagEval = true; @@ -443,9 +427,6 @@ private boolean updatePersonNextPeriod(States states, Axis axis) { } else if (Axis.SocialCareReceipt.equals(axis)) { val0 = personProxyNextPeriod.getSocialCareReceipt(); val1 = states.getSocialCareReceiptCode(); - } else if (Axis.SocialCareProvision.equals(axis)) { - val0 = personProxyNextPeriod.getSocialCareProvision(); - val1 = states.getSocialCareProvisionCode(); } else if (Axis.Cohabitation.equals(axis)) { val0 = personProxyNextPeriod.getDcpst(); val1 = states.getDcpst(); @@ -477,8 +458,6 @@ private boolean updatePersonNextPeriod(States states, Axis axis) { personProxyNextPeriod.setDlltsd(states.getDlltsd()); } else if (Axis.SocialCareReceipt.equals(axis)) { personProxyNextPeriod.setSocialCareReceipt(states.getSocialCareReceiptCode()); - } else if (Axis.SocialCareProvision.equals(axis)) { - personProxyNextPeriod.setSocialCareProvision(states.getSocialCareProvisionCode()); } else if (Axis.Cohabitation.equals(axis)) { personProxyNextPeriod.setDcpstLocal(states.getDcpst()); } else if (Axis.Child.equals(axis)) { diff --git a/src/main/java/simpaths/model/decisions/GridScale.java b/src/main/java/simpaths/model/decisions/GridScale.java index 69a18fd41..9f5b3e924 100644 --- a/src/main/java/simpaths/model/decisions/GridScale.java +++ b/src/main/java/simpaths/model/decisions/GridScale.java @@ -43,7 +43,6 @@ public GridScale() { if (DecisionParams.flagHealth) numberOfStates++; // health status if (DecisionParams.flagDisability) numberOfStates++; // disability status if (Parameters.flagSocialCare) numberOfStates++; // social care receipt - if (Parameters.flagSocialCare) numberOfStates++; // social care provision if (DecisionParams.flagRegion) numberOfStates++; // region if (DecisionParams.flagEducation) numberOfStates++; // student if (DecisionParams.flagEducation) numberOfStates++; // education @@ -214,16 +213,6 @@ public GridScale() { dimIndex++; } - // social care provision - if (Parameters.flagSocialCare) { - axes[aa][dimIndex][0] = 4; // none, partner only, partner and non-partner, non-partner only (see Enum SocialCareProvision) - axes[aa][dimIndex][1] = 0; - axes[aa][dimIndex][2] = 3; - axes[aa][dimIndex][3] = 0; - axes[aa][dimIndex][4] = 0; - dimIndex++; - } - //region if (DecisionParams.flagRegion) { axes[aa][dimIndex][0] = DecisionParams.PTS_REGION; @@ -505,14 +494,6 @@ public int getIndex(Enum axisID, int ageYears, int birthAge) { if (axisID==Axis.SocialCareReceipt) return -1; } - // social care provision - if (Parameters.flagSocialCare) { - if (axisID==Axis.SocialCareProvision) return dimIndex; - dimIndex++; - } else { - if (axisID==Axis.SocialCareProvision) return -1; - } - // region if (DecisionParams.flagRegion) { if (axisID==Axis.Region) return dimIndex; diff --git a/src/main/java/simpaths/model/decisions/ManagerFileGrids.java b/src/main/java/simpaths/model/decisions/ManagerFileGrids.java index 1c0562583..b6f3aec47 100644 --- a/src/main/java/simpaths/model/decisions/ManagerFileGrids.java +++ b/src/main/java/simpaths/model/decisions/ManagerFileGrids.java @@ -176,7 +176,6 @@ public static void formattedWrite(Grids grids, int aa) { bean.setHealth(currentStates.getHealthVal()); bean.setDisability(currentStates.getDisability()); bean.setSocialCareReceipt(currentStates.getSocialCareReceipt()); - bean.setSocialCareProvision(currentStates.getSocialCareProvision()); bean.setRegion(currentStates.getRegion()); bean.setStudent(currentStates.getStudent()); bean.setEducation(currentStates.getEducation()); @@ -202,7 +201,7 @@ public static void formattedWrite(Grids grids, int aa) { if (!dir.exists()) dir.mkdir(); String filePath = DecisionParams.gridsOutputDirectory + File.separator + "grid_age_" + ageYears + ".csv"; String[] HEADERS = {"wealth", "wageperhour", "pensionperyear", "birthyear", "wageoffer1", "retirement", "health", "disability", - "socialcarereceipt", "socialcareprovision", "region", "student", "education", "children0", "children1", "children2", + "socialcarereceipt", "region", "student", "education", "children0", "children1", "children2", "married", "gender", "consumptionshare", "employment1", "employment2", "valuefunction"}; try { BufferedWriter writer = Files.newBufferedWriter(Paths.get(filePath)); @@ -220,7 +219,6 @@ public static void formattedWrite(Grids grids, int aa) { record.add(bean.getHealthString()); record.add(bean.getDisabilityString()); record.add(bean.getSocialCareReceiptString()); - record.add(bean.getSocialCareProvisionString()); record.add(bean.getRegionString()); record.add(bean.getStudentString()); record.add(bean.getEducationString()); diff --git a/src/main/java/simpaths/model/decisions/States.java b/src/main/java/simpaths/model/decisions/States.java index f41050236..c6f5d5f98 100644 --- a/src/main/java/simpaths/model/decisions/States.java +++ b/src/main/java/simpaths/model/decisions/States.java @@ -106,10 +106,6 @@ public States(BenefitUnit benefitUnit, GridScale scale) { if (Parameters.flagSocialCare && ageYears >= DecisionParams.minAgeReceiveSocialCare) populate(Axis.SocialCareReceipt, (double)refPerson.getSocialCareReceiptState().getValue()); - // social care provision - if (Parameters.flagSocialCare) - populate(Axis.SocialCareProvision, refPerson.getSocialCareProvisionState()); - // region if ( DecisionParams.flagRegion ) populate(Axis.Region, benefitUnit.getRegionIndex()); @@ -332,12 +328,6 @@ boolean checkOuterStateCombination() { loopConsider = false; } - // check care provision - if (!getCohabitation() && - ( SocialCareProvision.OnlyPartner.equals(getSocialCareProvisionCode()) || - SocialCareProvision.PartnerAndOther.equals(getSocialCareProvisionCode()) )) - loopConsider = false; - // return result return loopConsider; } @@ -649,18 +639,6 @@ public boolean getPrincipalEligibleForWork() { return true; } - /** - * METHOD TO RETURN SOCIAL CARE PROVISION - * @return integer (0 no care, 1 only to partner, 2 to partner and other, 3 only to other - */ - int getSocialCareProvision() { - if (Parameters.flagSocialCare) { - return (int) labStatesContObject[scale.getIndex(Axis.SocialCareProvision, ageYears)]; - } else { - return 0; - } - } - /** * METHOD TO RETURN EDUCATION STATUS IMPLIED BY STATE COMBINATION * @return integer @@ -911,18 +889,6 @@ SocialCareReceipt getSocialCareReceiptCode() { return code; } - /** - * METHOD TO IDENTIFY SOCIAL CARE PROVISION CODE IMPLIED BY STATE COMBINATION - */ - SocialCareProvision getSocialCareProvisionCode() { - SocialCareProvision code; - if (Parameters.flagSocialCare) - code = SocialCareProvision.getCode(getVal(Axis.SocialCareProvision)); - else - code = SocialCareProvision.None; - return code; - } - /** * METHOD TO IDENTIFY HEALTH MEASURE USED BY SimPaths AS IMPLIED BY STATE COMBINATION * @return double @@ -1043,14 +1009,6 @@ public void systemReportError(long errorIndex) { System.out.println(msg); } - // social care provision - if (Parameters.flagSocialCare) { - stateIndex = scale.getIndex(Axis.SocialCareProvision, ageYears); - printOutOfBounds(stateIndex); - msg = "social care provision: " + String.format(fmtIndicator, labStatesContObject[stateIndex]); - System.out.println(msg); - } - // region if (DecisionParams.flagRegion) { stateIndex = scale.getIndex(Axis.Region, ageYears); diff --git a/src/main/java/simpaths/model/decisions/WriteGridsBean.java b/src/main/java/simpaths/model/decisions/WriteGridsBean.java index f500a1ff6..3613a2466 100644 --- a/src/main/java/simpaths/model/decisions/WriteGridsBean.java +++ b/src/main/java/simpaths/model/decisions/WriteGridsBean.java @@ -22,7 +22,6 @@ public class WriteGridsBean { private int health; private int disability; private int careReceivedFlag; - private int careProvidedFlag; private int demRgn; private int student; private int education; @@ -61,7 +60,6 @@ public void setHealth(int health) { } public void setDisability(int disability) {this.disability = disability;} public void setSocialCareReceipt(int careReceivedFlag) {this.careReceivedFlag = careReceivedFlag;} - public void setSocialCareProvision(int careProvidedFlag) {this.careProvidedFlag = careProvidedFlag;} public void setRegion(int demRgn) {this.demRgn = demRgn;} public void setStudent(int student) { this.student = student; @@ -119,7 +117,6 @@ public int getHealth() { } public int getDisability() {return disability;} public int getSocialCareReceipt() {return careReceivedFlag;} - public int getSocialCareProvision() {return careProvidedFlag;} public int getRegion() {return demRgn;} public int getStudent() { return student; @@ -187,7 +184,6 @@ public String getDisabilityString() { return String.valueOf(disability); } public String getSocialCareReceiptString() {return String.valueOf(careReceivedFlag);} - public String getSocialCareProvisionString() {return String.valueOf(careProvidedFlag);} public String getRegionString() {return String.valueOf(demRgn);} public String getStudentString() { return String.valueOf(student); diff --git a/src/main/java/simpaths/model/enums/SocialCareProvision.java b/src/main/java/simpaths/model/enums/SocialCareProvision.java deleted file mode 100644 index 7e66e07f4..000000000 --- a/src/main/java/simpaths/model/enums/SocialCareProvision.java +++ /dev/null @@ -1,26 +0,0 @@ -package simpaths.model.enums; - -import microsim.statistics.regression.IntegerValuedEnum; - -public enum SocialCareProvision implements IntegerValuedEnum { - - None(0), - OnlyPartner(1), - PartnerAndOther(2), - OnlyOther(3); - - private final int value; - SocialCareProvision(int val) {value = val;} - - @Override - public int getValue() {return value;} - public static SocialCareProvision getCode(double val) { - if (val<0.5) - return SocialCareProvision.None; - if (val<1.5) - return SocialCareProvision.OnlyPartner; - else if (val<2.5) - return SocialCareProvision.PartnerAndOther; - else return SocialCareProvision.OnlyOther; - } -} diff --git a/src/main/java/simpaths/model/enums/TimeSeriesVariable.java b/src/main/java/simpaths/model/enums/TimeSeriesVariable.java index db2a7a441..ee10766af 100644 --- a/src/main/java/simpaths/model/enums/TimeSeriesVariable.java +++ b/src/main/java/simpaths/model/enums/TimeSeriesVariable.java @@ -1,7 +1,6 @@ package simpaths.model.enums; public enum TimeSeriesVariable { - CareProvisionAdjustment, CarerWageRate, EmploymentAlignment, FixedRetirementAge,