I don't think this is a different kind of sampling, so when you ask how to do it in R, I don't have a different answer for you than "same as you would take a stratified sample if there were no nonresponse." Taking nonresponse into account is a practical question, and it's independent of its implementation in statistical software. And, because survey methodology is not an exact science, you'll have to make some decisions that are inevitably subjective and based on what you as the author of a survey believe is the best choice.
You're interested in preserving stratification while taking into account the nonresponse rate. This may be possible only through sampling, but likely you may need to combine sampling design with some method of poststratification in order to preserve strata sizes. This depends on how close your expected response rate (prior to actually doing the survey) is to your actual response rate once you've finished the survey. Due to the nature of sampling, even if you know from previously sampling the same population that on average 50% of people respond, in any particular survey you can get a lower or higher number, like 48% or 55%. So if you really want to preserve exact strata sizes, you will probably need to adjust this in post-stratification.
In the planning stage, I don't think you have any better choice than contacting a larger sample than you need (backup, as you suggest). Survey Monkey mentions this approach. The total number of elements you need to contact (call it $c$) in order to obtain a desired number of respondents ($n$) is inversely proportional to your expected response rate expressed as a fraction ($r$): $c = (1/r)*n$. To take your example, if you need 10 respondents and the response rate is 50%, you need to contact $(1/0.5)*10=20$ people. This makes sense intuitively, too. If you are targeting 10 people and expect only 5 of them to respond, you need another 10 people as a backup because, if they are drawn from the same population, the backup people ALSO have a response rate of 50%.
Combining this with stratification, you have two choices. If you believe the non-response rate is the same across all strata (i.e. it's uncorrelated with the stratification variable), you would simply double all allocated strata sizes. Say, if you need a sample of 100 allocated across four strata (let's label them A, B, C, D) thus: A = 10, B = 20, C = 30, D = 40, and the response rate in all strata is 50%, you would draw a sample of A = 20, B = 40, C = 60, D = 80, for a total of 200 people to contact. If you think the response rates are different across strata (A = 50%, B = 75%, C = 90%, D = 60%), then you would draw: A = 20, B = ~27, C = ~33, D = ~67 for a total of 147 people to contact.
In R, you can do this with the stratsample()
function in the 'survey' package, or with the strata()
function in the 'sampling' package (make sure to read the details section to order your data correctly).
How you treat these larger strata sizes then is a matter of choice. You can contact all and see what you get. You can contact them in some order (or no particular order) until you get the desired sample size. You can split your larger sample into a "primary" and "backup" sub-sample in each stratum (for example by drawing a sub-sample of primary elements, and treating the remainder as backup), contact the primary sub-sample first, and then draw from the backup sub-sample; you could even match elements in the primary and backup sub-samples by some variables you think matter, so that when person i from the primary sub-sample does not respond, you have an exact person i-backup (or a couple of them) in the backup sub-sample to contact instead (I've done this in a survey of farm households: I had four strata of size 30 each, but I drew 40 from the sampling frame. When a cattle farmer with less than 10 cows would fail to respond, I would replace them with another cattle farmer with less than 10 cows).
So much for sampling. You can deal with nonresponse further in post-stratification. In R, you can use the nonresponse()
function from the 'survey' package to adjust weights for nonresponse across strata.
I hope this helps you.