Stock & Yogo (2005) provide the rule-of-thumb that the first-stage F-test of an IV regression should be above 10 for the bias of the instrument to be less than 10%, and suggest to call weak an instrument whose F stat is below 10. I am new to IV regressions, but I am aware that there are more recent to developments to test for the weakness of an instrument.
I am wondering how to conduct the state-of-the-art tests in R, and how to interpret the tests provided by different packages. In particular, the
ivreg function (in the
AER package) provides a Wald test, whose value at odds with the F stat, although this F stat is retrieved by applying the function
waldtest to the first stage with and without controls. Also, functions always provide p-values alongside the F stat, but I don't know how to interpret them (and whether I should take them into account). Indeed, these p-values are often very low, even when the F stat is low (say, =2): if the instrument is weak (according to the F stat), why does the function stresses that the p-value is low? Finally, I am unsure which statistic should be used to assess the weakness of the instrument: the F stat, the Wald stat of
ivreg, the F stat from Anderson-Rubin (AR) or Conditonal Likelihood Ratio (CLR) test, the p-values?
I provide hereafter an example to see the different statistics given by the functions. This example is minimal and reproducible, but it doesn't reflect my original data: I obtain a Wald test of 20 according to
ivreg, but a F stat of 8, and even 3 or 4 with CLR or AR. Does this mean my instruments are weak? Should I use LIML or Fuller instead of 2SLS?
library(ivmodel) data(card.data) library(AER) library(lmtest) summary(ivreg(lwage ~ educ + exper | nearc4 + exper, data=card.data), diagnostics = TRUE) # t: 8 (p: e-14); Wald: 29 (p< e-13); F (Weak instrument): 58 (p: e-14) summary(ivmodel(Y=card.data$lwage, D=card.data$educ, Z=card.data$nearc4, X=card.data$exper)) # F: 58 (p: e-14); AR/CLR: 83 (p< e-16) waldtest(lm(educ ~ nearc4 + exper, data=card.data), lm(educ ~ exper, data=card.data))$F # 58