statistically comparing linear regressions (in R) I would like to compare regression models collected in three locations to see whether location makes a difference.
Consider some toy data:
mydata <- read.table(header=TRUE, text="
location    height  weight
    spain   178 90
    spain   187 80
    spain   155 70
    spain   187 85
    spain   150 60
    spain   155 73
    spain   168 80
    spain   160 75
    spain   177 77
    spain   178 83
    russia  165 60
    russia  161 55
    russia  187 94
    russia  175 77
    russia  170 70
    russia  181 90
    russia  173 72
    russia  163 58
    russia  177 80
    russia  167 67
    peru    177 75
    peru    182 65
    peru    145 55
    peru    176 70
    peru    150 45
    peru    155 58
    peru    168 65
    peru    160 60
    peru    177 62
    peru    178 68
        ")

I know I can use ANOVAs etc to see if there is a treatment (i.e. country) difference in height or weight but I am not sure if I can do this explicitly for the REGRESSIONS (i.e. is there a difference in the relationship between height and weight in different countries). For this example, I would like to assume that weight is a function of height.
If you produce a regression for each country, you'll see that spain and peru have a similar slope but a different intercept, while russia has a much steeper slope and intercept. How can I formally test this (ideally with significance values etc)?
 A: What you are describing is a difference in slopes for each country. You can assess this by including an interaction term in your model, such that each country gets its own addition to the slope:
$\text{weight}_{ijk} = \beta_0 + \beta_1 \cdot \text{height}_j + \beta_2 \cdot \text{location}_k + \beta_3 (\text{height}\cdot\text{location})_{jk} + \epsilon_{ijk}$
In $\textsf{R}$, you can do this as follows:  
LM <- lm(weight ~ height * location, mydata)
summary(LM)

If you look at the coefficients tab for example, you will see which slopes are different by looking at the interaction term:  
Coefficients:
                       Estimate Std. Error t value Pr(>|t|)    
(Intercept)            -23.6958    18.3472  -1.292    0.209    
height                   0.5156     0.1097   4.701 8.89e-05 ***
locationrussia        -173.4683    35.3684  -4.905 5.29e-05 ***
locationspain           15.6250    25.7157   0.608    0.549    
height:locationrussia    1.0520     0.2071   5.079 3.41e-05 ***
height:locationspain    -0.0119     0.1525  -0.078    0.938    

In this case Russia's slope differs significantly from Peru (Intercept) by about 1. You can change which country is in the intercept with the function relevel() to make other comparisons than just Peru. 
If your interest lies not in these countries specifically, but more generally "do countries differ", you could also consider location to be a random effect in the context of a mixed model. In this case, you would want to estimate a random slope for height, e.g.:
LMM <- lmer(weight ~ height + (0 + height|location), mydata)

You could then bootstrap confidence intervals to see if the random effect for location is indeed significant (i.e. countries differ significantly):
confint(LMM, method = "boot")

