Wednesday, September 16, 2015

First post-Abbott aggregation (not to be taken too seriously)

Today's ReachTEL was conducted on Tuesday this week, the day after the Turnbull ascension. The result was 50-50, which is a three point move in the Coalition's direction over the previous ReachTEL poll.

It will take a full cycle of polling before we have a sense of the immediate impact of the change in Liberal leadership. So I would not read too much into today's result.

Ignoring my own advice, I thought it would interesting to drop the ReachTEl poll into the usual aggregation. This is the one where the house effects sum to zero. I made an adjustment to the polling model to allow for a discontinuity in the temporal element of the model for the leadership change on 14 September 2015.  (I used a similar discontinuity technique in 2013 when Rudd replaced Gillard).

The result, which should be consumed with more than the usual pinch of salt, is a tie. This is unsurprising given the house effect the model applies to the one-and-only post discontinuity poll.



For the nerds among you, the discontinuity model I used follows:

model {
    ## -- observational model
    for(poll in 1:n_polls) { # for each observed poll result ...
        yhat[poll] <- houseEffect[house[poll]] + hidden_voting_intention[day[poll]]
        y[poll] ~ dnorm(yhat[poll], samplePrecision[poll]) # distribution
    }

    ## -- temporal model - with one discontinuity
    hidden_voting_intention[1] ~ dunif(0.3, 0.7)
    for(i in 2:(discontinuity-1)) { 
        hidden_voting_intention[i] ~ dnorm(hidden_voting_intention[i-1], walkPrecision)
    }
    hidden_voting_intention[discontinuity] ~ dnorm(hidden_voting_intention[discontinuity-1]+discontinuityValue, walkPrecision)
    for (j in (discontinuity+1):n_span) {
        hidden_voting_intention[j] ~ dnorm(hidden_voting_intention[j-1], walkPrecision)
    }
    sigmaWalk ~ dunif(0, 0.01)
    walkPrecision <- pow(sigmaWalk, -2)
    discontinuityValue ~ dunif(-0.1, 0.1) ## contextually uninformative prior

    ## -- house effects model
    for(i in 2:n_houses) { # for each polling house, except the first ...
        houseEffect[i] ~ dunif(-0.15, 0.15)
    }
    houseEffect[1] <- -sum( houseEffect[2:n_houses] )
}

No comments:

Post a Comment