How to implement a Kish Grid in Nfield CAPI

A Kish Grid is a mechanism for randomizing who to interview within a household when going door-to-door. Its purpose is to eliminate bias that can be created by just interviewing whoever happens to answer the door, because younger and older household members are less likely to do this.

How a Kish Grid is used

Knowing what a Kish Grid looks like, and how it’s read, is helpful for understanding how to script one. 

  • The left-hand column shows the sequence of households being visited. There is no specific guideline for the order of assignment. This can be by house number, by the number of visits the interviewer has made or by the order in which addresses were added to the list.
  • The top row shows the number of eligible people in a household.

The Kish Grid is read by cross-referencing the Household Sequence number (e.g. 7) against the Number of eligible people in that household (e.g. 4). In this example, the resulting answer is 3. This indicates the interviewer should interview the 3rd youngest eligible person in the household.

Kish Grid

How to create a Kish Grid script in Nfield

The complete Kish Grid script can be downloaded from a link at the end of this article. The extracts below are just a selection of examples to help you understand how the script and variables are constructed.

Setting up the randomization
This starts with creating arrays for each of the eight columns. Using a household size of 100 provides good scope for randomization.

*VARS EligablePeopleNum1[100], EligablePeopleNum2[100], EligablePeopleNum3[100],
EligablePeopleNum4[100], EligablePeopleNum5[100], EligablePeopleNum6[100],
EligablePeopleNum7[100], EligablePeopleNum8[100]

Specify an array of 8 counts. These counts will be used for looping in each column to populate its value. As we have 8 columns to represent a maximum of 8 eligible people in a household, 8 counts are needed.  

*VARS Count[8]

Set each of count value to 1 as initialization for counting.

*PUT Count[?R][1]

The script will now populate the table by repeating a simple loop 100 times to fill in each row, one after one. In each loop, it fills in each column.

*PUT EligablePeopleNum1[?R] [1]
*IF [Count[2] <= 2] *PUT EligablePeopleNum2[?R] [Count[2]] *PUT Count[2] [Count[2]+1]
*IF [Count[2] >2] *PUT Count[2] [1]
*IF [Count[3] <= 3] *PUT EligablePeopleNum3[?R] [Count[3]] *PUT Count[3] [Count[3]+1]
*IF [Count[3] >3] *PUT Count[3] [1]
*IF [Count[4] <= 4] *PUT EligablePeopleNum4[?R] [Count[4]] *PUT Count[4] [Count[4]+1]
*IF [Count[4] >4] *PUT Count[4] [1]
*IF [Count[5] <= 5] *PUT EligablePeopleNum5[?R] [Count[5]] *PUT Count[5] [Count[5]+1]
*IF [Count[5] >5] *PUT Count[5] [1]
*IF [Count[6] <= 6] *PUT EligablePeopleNum6[?R] [Count[6]] *PUT Count[6] [Count[6]+1]
*IF [Count[6] >6] *PUT Count[6] [1]
*IF [Count[7] <= 7] *PUT EligablePeopleNum7[?R] [Count[7]] *PUT Count[7] [Count[7]+1]
*IF [Count[7] >7] *PUT Count[7] [1]
*IF [Count[8] <= 8] *PUT EligablePeopleNum8[?R] [Count[8]] *PUT Count[8] [Count[8]+1]
*IF [Count[8] >8] *PUT Count[8] [1]

The script will generate a question in the CAPI survey asking how many eligible people the household consists of.

*QUESTION 10 *NUMBER 61L1 *SAVE FamilySize *MAX 8
How many people live in this household?

And ask for their names, in ascending age

Name them in ascending age (youngest first)

1: 1-*ALPHA 71L30 *SAVE Name[1]
2: 2-*ALPHA 101L30 *SAVE Name[2]
3: 3-*ALPHA 131L30 *SAVE Name[3]
4: 4-*ALPHA 161L30 *SAVE Name[4]
5: 5-*ALPHA 191L30 *SAVE Name[5]
6: 6-*ALPHA 221L30 *SAVE Name[6]
7: 7-*ALPHA 251L30 *SAVE Name[7]
8: 8-*ALPHA 281L30 *SAVE Name[8]

Let’s look at an example where we’ve just used a random number as the household sequence number.

*PUT HouseHoldSeq [RAN(8)]
*PUT HouseHoldSeq [HouseHoldSeq + 1]

Or you can choose a Household Sequence number from your respondent table. In this case, make sure the array sizes are also adjusted in the script.

Next, we refer to this table to find which person should be interviewed.

*VARS ans
*IF [FamilySize = 1] *PUT ans [EligablePeopleNum1[HouseHoldSeq]]
*IF [FamilySize = 2] *PUT ans [EligablePeopleNum2[HouseHoldSeq]]
*IF [FamilySize = 3] *PUT ans [EligablePeopleNum3[HouseHoldSeq]]
*IF [FamilySize = 4] *PUT ans [EligablePeopleNum4[HouseHoldSeq]]
*IF [FamilySize = 5] *PUT ans [EligablePeopleNum5[HouseHoldSeq]]
*IF [FamilySize = 6] *PUT ans [EligablePeopleNum6[HouseHoldSeq]]
*IF [FamilySize = 7] *PUT ans [EligablePeopleNum7[HouseHoldSeq]]
*IF [FamilySize = 8] *PUT ans [EligablePeopleNum8[HouseHoldSeq]]

Family size: *?FamilySize
means to use array EligablePeopleNum*?FamilySize

Household Seq: *?HouseHoldSeq
means to use row *?HouseHoldSeq

So you should pick the family member *?Name[ans] in the *?ans (-th) position to interview

The following animation gives an idea how it looks from interviewer’s perspective.


We hope this helps you understand how to set up your own Kish Grid in Nfield CAPI, based on our Kish Grid script. If you have any questions or feedback, please don’t hesitate to contact us.

Download Nfield CAPI Kish Grid script