SwissTPH / openmalaria

A simulator of malaria epidemiology and control
GNU General Public License v2.0
76 stars 30 forks source link

Logit ITN parameterisation #172

Closed dhardy closed 7 years ago

dhardy commented 8 years ago

As discussed with Olivier, implement a new variant of the ITN parameterisation of net hole & insecticide effect.

ThomasASmith commented 7 years ago

I've given this a priority of 'Medium'. I is important that this should not complicate things even more, and represents a simplification of the existing ITN parameterisations. Linked to this, Olivier has promised to make the Wiki documentation of ITN parameterisations more transparent, guiding new users so that they don't make things more complicated than they need to.

obriet commented 7 years ago

Here is the XML edit

      <xs:element name="anophelesParams" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:choice>
              <xs:element name="deterrency" type="om:ITNDeterrency">
                <xs:annotation>
                  <xs:documentation>
                  Effect of net on attractiveness of humans to mosquitoes relative to
                  an unprotected adult human. Parameterisations should take into
                  account that mosquitoes do not always bite indoors.

                  Attractiveness of the human is multiplied by
                  exp(log(H)×h + log(P)×p + log(I)×h×p
                  where H, P and I are the hole, insecticide and interaction factors
                  respectively, h=exp(-holeIndex×holeScalingFactor) and
                  p=1−exp(-insecticideContent×insecticideScalingFactor).
                  </xs:documentation>
                  <xs:appinfo>units:dimensionless;min:0;max:1;name:Relative attractiveness;</xs:appinfo>
                </xs:annotation>
              </xs:element>
              <xs:element name="twoStageDeterrency">
                <xs:annotation>
                  <xs:documentation>
                  Effect of net on attractiveness of humans to mosquitoes relative to
                  an unprotected adult human. Parameterisations should take into
                  account that mosquitoes do not always bite indoors.

                  This deterrency model multiplies human attractiveness by
                  pEnt×pAtt.
                  </xs:documentation>
                  <xs:appinfo>units:dimensionless;name:Relative attractiveness;</xs:appinfo>
                </xs:annotation>
                <xs:complexType>
                  <xs:all>
                    <xs:element name="entering" type="om:IRSDeterrency">
                      <xs:annotation>
                        <xs:documentation>
                          pEnt represents the relative probability of entering due to insecticide in the hut:
                          pEnt=exp(logit.pEnt)/(exp(logit.pEnt)+1)
                          logit.pEnt = B+P*p
                          where B is the basefactor (without net); P is
                          insecticide factor, and p=log(insecticideContent+1).
                          Without a net, probability of entering a house 
                          pEnt0=exp(logit.pEnt0)/(exp(logit.pEnt0)+1)
                          logit.pEnt0 = B
                          Entering of mosquitoes is adjusted via multiplication by pEnt / pEnt0.
                          To keep this in the range [0,1], we (normally) require that pEnt ≤ pEnt0 and thus P ≤ 0 and give a warning if this is not fulfilled.
                        </xs:documentation>
                        <xs:appinfo>units:dimensionless;name:RA (entering)</xs:appinfo>
                      </xs:annotation>
                    </xs:element>
                    <xs:element name="attacking" type="om:ITNKillingEffect">
                      <xs:annotation>
                        <xs:documentation>
                          pAtt represents the relative probability of attacking a human
                          after entering a house due to ITNs (i.e. of feeding/dying vs.
                          flying off): 
                          pAtt=exp(logit.pAtt)/(exp(logit.pAtt)+1)
                          logit.pAtt = B + H×min(h,hMax) + P×p + I×min(h,hMax)×p
                          where B is the base factor (without net); H, P and
                          I are the hole, insecticide and interaction factors
                          respectively, h=log(holeIndex+1) and
                          p=log(insecticideContent+1).
                          Without a net, probability of attacking a human
                          after entering a house 
                          pAtt0=exp(logit.pAtt0)/(exp(logit.pAtt0)+1)
                          logit.pAtt0 = B + H×hMax
                          where hMax=log(holeIndexMax+1) and holeIndexMax is a user defined maximum hole index (typically, the total surface area of a net).
                          Attacking of mosquitoes is adjusted via multiplication by pAtt / pAtt0. This may be larger and smaller than 1 (but will not be negative).
                          By definition (through the logit transformation) pAtt0 > 0.  
                        </xs:documentation>
                        <xs:appinfo>units:dimensionless;name:RA (attacking)</xs:appinfo>
                      </xs:annotation>
                    </xs:element>
                  </xs:all>
                </xs:complexType>
              </xs:element>
            </xs:choice>
            <xs:element name="preprandialKillingEffect" type="om:ITNKillingEffect">
              <xs:annotation>
                <xs:documentation>
                Effect of net on survival mosquitoes as they seek to bite a human
                after choosing that human, relative to the same person not
                sleeping under a net.                 
                Killing proportion is calculated as 
                K=exp(logit.K)/(exp(logit.K)+1)
                logit.K = B + H×min(h,hMax) + P×p + I×min(h,hMax)×p
                where B is the basefactor (without net),
                H, P and I are the hole, insecticide and interaction factors
                respectively, h=log(holeIndex+1) and
                p=log(insecticideContent+1).
                Without a net, the killing proportion
                K0=exp(logit.K0)/(exp(logit.K0)+1)
                logit.K0 = B + H×hMax
                where hMax=log(holeIndexMax+1) and holeIndexMax is a user defined maximum hole index (typically, the total surface area of a net).
                Survival of mosquitoes is adjusted via multiplication by (1−K) / (1−K0).
                To keep this in the range [0,1], we require that K ≥ K0. We enforce that P ≥ 0 (It would not make sense biologically if P were negative) and P+I*hMax ≥ 0 and H ≤ 0 and holeIndex ≤ holeIndexMax and give a warning if these conditions are not fulfilled.
                </xs:documentation>
                <xs:appinfo>units:dimensionless;min:0;max:1;name:Pre-prandial killing effect;</xs:appinfo>
              </xs:annotation>
            </xs:element>
            <xs:element name="postprandialKillingEffect" type="om:ITNKillingEffect">
              <xs:annotation>
                <xs:documentation>
                Effect of net on survival mosquitoes as they seek to escape from
                a human host and rest after a blood meal, relative to the same
                person not sleeping under a net.
                Killing proportion is calculated as 
                K=exp(logit.K)/(exp(logit.K)+1)
                logit.K = B + H×min(h,hMax) + P×p + I×min(h,hMax)×p
                where B is the basefactor (without net),
                H, P and I are the hole, insecticide and interaction factors
                respectively, h=log(holeIndex+1) and
                p=log(insecticideContent+1).
                Without a net, the killing proportion
                K0=exp(logit.K0)/(exp(logit.K0)+1)
                logit.K0 = B + H×hMax
                where hMax=log(holeIndexMax+1) and holeIndexMax is a user defined maximum hole index (typically, the total surface area of a net).
                Survival of mosquitoes is adjusted via multiplication by (1−K) / (1−K0).
                To keep this in the range [0,1], we require that K ≥ K0. We enforce that P ≥ 0 (It would not make sense biologically if P were negative) and P+I*hMax ≥ 0 and H ≤ 0 and holeIndex ≤ holeIndexMax and give a warning if these conditions are not fulfilled.
              </xs:documentation>
              <xs:appinfo>units:dimensionless;min:0;max:1;name:Post-prandial killing effect;</xs:appinfo>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="mosquito" type="xs:string" use="required">
            <xs:annotation>
              <xs:documentation>
                Name of the affected anopheles-mosquito species.
              </xs:documentation>
              <xs:appinfo>name:Mosquito species;</xs:appinfo>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="propActive" type="xs:double" default="1">
            <xs:annotation>
              <xs:documentation>
              The proportion of bites, when nets are in use, for which the net
              has any action whatsoever on the mosquito.

              At the moment this is constant across humans and deterministic:
              relative attractiveness and survival factors are
              base*(1-usage*propActing) + intervention_factor*usage*propActing.

              See also "usage" (proportion of time nets are used by humans).
            </xs:documentation>
              <xs:appinfo>units:dimensionless;min:0;max:1;name:Proportion of bites for which net acts;</xs:appinfo>
            </xs:annotation>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
    <xs:complexType name="ITNKillingEffect">
    <xs:complexContent>
      <xs:extension base="om:ITNDeterrency">
        <xs:attribute name="baseFactor" type="xs:double" use="required">
          <xs:annotation>
            <xs:appinfo>units:dimensionless;name:Probability of mosquito death without intervention</xs:appinfo>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="holeIndexMax" type="xs:double" use="required">
          <xs:documentation> holeIndexMax is a user defined maximum hole index (typically, the total surface area of a net).
          </xs:documentation>
          <xs:annotation>
            <xs:appinfo>units:in same unit as holeIndex;name:maximum of holed surface area that has an effect (comparable to no net)</xs:appinfo>
          </xs:annotation>
        </xs:attribute>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="ITNDeterrency">
    <xs:complexContent>
      <xs:extension base="om:IRSDeterrency">
        <xs:attribute name="holeFactor" type="xs:double" use="required">
          <xs:annotation>
            <xs:documentation>
              Value expected to be at least 0. Negative values are not
              necessarily invalid, but allow nets to increase transmission.
            </xs:documentation>
            <xs:appinfo>units:none;name:Hole factor;max:1</xs:appinfo>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="interactionFactor" type="xs:double" use="required">
          <xs:annotation>
            <xs:documentation>
              holeFactor + insecticideFactor + interactionFactor must not be greater
              than 1, and is expected to be at least 0. A negative value is not
              necessarily invalid, but allows nets to increase transmission.
            </xs:documentation>
            <xs:appinfo>units:none;name:Interaction factor;max:1</xs:appinfo>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="holeScalingFactor" type="xs:double" use="required">
          <xs:annotation>
            <xs:appinfo>units:none;name:Hole scaling factor;min:0</xs:appinfo>
          </xs:annotation>
        </xs:attribute>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="IRSDeterrency">
    <xs:attribute name="insecticideFactor" type="xs:double" use="required">
      <xs:annotation>
        <xs:documentation>
          Value expected to be at least 0. Negative values are not
          necessarily invalid, but allow nets to increase transmission.
        </xs:documentation>
        <xs:appinfo>units:none;name:Insecticide factor;max:1</xs:appinfo>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="insecticideScalingFactor" type="xs:double" use="required">
      <xs:annotation>
        <xs:appinfo>units:none;name:Insecticide scaling factor;min:0</xs:appinfo>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
dhardy commented 7 years ago

@obriet pretty sure this is done

obriet commented 7 years ago

Yes it is, thanks!

-----"Diggory Hardy" notifications@github.com wrote: ----- To: "SwissTPH/openmalaria" openmalaria@noreply.github.com From: "Diggory Hardy" notifications@github.com Date: 10/03/2017 03:50PM Cc: "Olivier Briët" olivier.briet@unibas.ch, "Mention" mention@noreply.github.com Subject: Re: [SwissTPH/openmalaria] Logit ITN parameterisation (#172)

 @obriet pretty sure this is done

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.


This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error, please notify us immediately by reply e-mail and delete this message from your system.