Eduard Bukin
Farm’s production function
\[ h(q,x,z) = 0, \]
where:
\(q\) - output quantities (agricultural produce)
\(x\) - variable input quantities (fertilizers, labor, seed, water, …)
\(z\) - fixed factors (private: land, equipment; public: infrastructure, extension; exogenous features …)
Prices of inputs \(w^{'}\) and outputs \(p^{'}\) affect farmers decisions of:
what and how much to produce \(q\), and
what and how much to use as the input \(x\).
Farm’s objective function is to maximize own profit:
\[ \max_{x,q} \;\;\; p^{'}q-w^{'}x, \\ \text{s.t.} \;\; h(q,x,z) = 0 \]
\[ \max_{x,q} \;\;\; p^{'}q-w^{'}x, \\ \text{s.t.} \;\; h(q,x,z) = 0 \]
Is a set of input demand and output supply functions:
\[ \begin{cases} x = x(p,w,z), & \text{factor demand function} \\ q = q(p,w,z), & \text{supply function} \end{cases} \]
Structural form.
\[ \max_{x,q} \;\;\; p^{'}q-w^{'}x, \\ \text{s.t.} \;\; h(q,x,z) = 0 \]
Reduced forms.
\[ \begin{cases} x = x(p,w,z), & \text{factor demand function} \\ q = q(p,w,z), & \text{supply function} \end{cases} \]
Mathematical function that transforms inputs quantities \(x\) into output \(q\).
Introduced by Brook Taylor in 1715 …
Value of any function could be approximated at an arbitrary point \(x_0\) with a Taylor expansion:
\[ f(x) \approx f(x_0) + f^{'}(x_0)(x - x_0) + \frac{f^{''}(x_0)}{2!}(x - x_0)^2 + \cdots . \]
What is the value of \(e^{0.4}\)?
\[ e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!} \approx 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots \]
\[ e^{0.4} \approx 1 + .4 + \frac{.4^2}{2!} + \frac{.4^3}{3!} + \frac{.4^4}{4!} + \frac{.4^5}{5!} \]
\[ \approx 1 + .4 + .16/2 + 0.064/6 + 0.0256/24 + 0.01024 / 120 \]
\[ \approx 1 + .4 + .08 + 0.0106(6) + 0.00106(6) + 0.000106(6) \]
\[ \approx 1.491819 \]
\[ \text{exp(0.4)} = 1.491825 \]
\(q \approx f(x)\) at \(x_0\).
\[ f(x) \approx f(x_0) + f^{'}(x_0)(x-x_0) \\ \approx \underbrace{f(x_0) - f^{'}(x_0) x_0}_{\alpha} + \underbrace{f^{'}(x_0)}_{\beta}\, x \]
Simple regression: \(q \approx \alpha + \beta \, x\)
\(q \approx f(x_1, x_2)\) at \(a, b\)
\[ f(x_1, x_2) \approx \underbrace{f(a,b) - f_{x_1}^{'}(a,b)a - f_{x_2}^{'}(a,b)b}_{\alpha} + \underbrace{f_{x_1}^{'}(a,b)}_{\beta_1}\, x_1 + \underbrace{f_{x_2}^{'}(a,b)}_{\beta_2}\, x_2 \]
Multiple regression: \(q \approx \alpha + \beta_1 \, x_1 + \beta_2 \, x_2\)
Results in polynomial functions with interaction terms:
\[ q \approx \alpha + \beta_1 \, x_1 + \beta_2 \, x_2 + \beta_3 \, x_1^2 + \beta_4 \, x_2^2 + \beta_5 x_1 x_2 \]
Consider
\[q = f(x_i)\]
Production function of several inputs \(x_i\), where
\[x_i = e^{\ln x_i}\]
and \(q\) is the quantity of goods produced.
Then,
\[ \ln q = \ln f(e^{\ln x_i}) \; \; \; \; \text{or} \; \; \; \; \ln q = g(\ln x_i) \]
Let us approximate \(\ln q = g(\ln x_i)\) using Taylor expansion.
\[ \ln q \approx \alpha + \sum_i \beta_i \ln x_i \]
This is a Cobb-Douglas production function: \(q \approx e^\alpha \prod_i x_i^{\beta_i}\)
of \(\ln q = g(\ln x_i)\) around an arbitrary point \(x_{i0} \ne 0\)
\[ \ln q \approx \alpha + \sum_i \beta_i \ln x_i + \frac{1}{2}\sum_{ij} \gamma_{ij} \ln x_{i} \ln x_{j} \]
This is a trans-log production function
Policy makers are considering to abolish the share-cropping land tenure system.
As an alternative either owner-cultivation with hired labor or pure rental relationship should be established.
Main rationale is in the claim that sharecropping is an inefficient farm structure.
Theoretical debate
Contract theory (Dasgupta, Knight, & Love, 1999) sees sharecropping as a form of the optimal risks and incentives sharing contract.
It is a second best contract in agriculture after pure rental of hired labor contract.
Sharecropping can be as efficient as rental/labor contracts, when interlinked labor, resources, credit and insurance markets fail.
Research question: Is there any negative effect of sharecropping on farms productivity?
Data that we have covers a sample of the rice-cultivating farmers in India (Feng & Horrace, 2010):
Let us estimate a simple production function of a rice-producing farm using linear form and Cobb-Douglas function.
\[\text{output} = \alpha + \beta_1 \text{status : share} + \beta_2 \text{status : mixed} + \beta_3 \text{land} + \beta_4 \text{labor} + e\]
\[\ln \text{output} = \alpha + \beta_1 \text{status : share} + \beta_2 \text{status : mixed} + \beta_3 \ln \text{land} + \beta_4 \ln \text{labor} + e\]
Rows: 1,026
Columns: 4
$ output <int> 7980, 4083, 2650, 4500, 16300, 17424, 3840, 2800, 950, 240, 150…
$ land <dbl> 3.000, 2.000, 1.000, 2.000, 3.572, 3.572, 1.420, 1.420, 0.428, …
$ labor <int> 2915, 2155, 1075, 2091, 3889, 3519, 810, 855, 460, 109, 230, 18…
$ status <fct> owner, owner, owner, owner, share, share, mixed, mixed, mixed, …
| owner / mean | owner / sd | share / mean | share / sd | mixed / mean | mixed / sd | |
|---|---|---|---|---|---|---|
| land | 0.44 | 0.58 | 0.36 | 0.56 | 0.44 | 0.39 |
| labor | 395.42 | 522.12 | 315.51 | 566.17 | 391.44 | 262.63 |
| output | 1435.68 | 2014.60 | 1250.65 | 2639.25 | 1356.59 | 1104.10 |
| Linear prod.fn. (level-level) | CD prod.fn. (log-log) | |
|---|---|---|
| (Intercept) | 6.203 (36.845) |
5.703 *** (0.202) |
| Sharecropping | 87.849 (96.953) |
0.004 (0.047) |
| Mixed | -90.608 (63.901) |
0.017 (0.031) |
| Land, ha | 2145.659 *** (111.521) |
0.679 *** (0.027) |
| Labor, hours | 1.248 *** (0.126) |
0.344 *** (0.030) |
| Num.Obs. | 1026 | 1026 |
| R2 | 0.819 | 0.843 |
| R2 Adj. | 0.819 | 0.842 |
| F | 1158.652 | 1369.377 |
| Linear prod. fn. (level-level) | CD prod. fn. (log-log) | |
|---|---|---|
| (Intercept) | 6.203 (36.845) |
5.703 *** (0.202) |
| Sharecropping | 87.849 (96.953) |
0.004 (0.047) |
| Mixed | -90.608 (63.901) |
0.017 (0.031) |
| Land, ha | 2145.659 *** (111.521) |
0.679 *** (0.027) |
| Labor, hours | 1.248 *** (0.126) |
0.344 *** (0.030) |
| Num.Obs. | 1026 | 1026 |
| R2 | 0.819 | 0.843 |
| R2 Adj. | 0.819 | 0.842 |
| F | 1158.652 | 1369.377 |
Interpret coefficients in both models.
What is the estimated effect of share-cropping?
Is this model shows causal effects of \(x\) on \(y\)?
Is there a ceteris paribus?
farm_dta %>%
mutate(fitted = fitted(fit1)) %>%
ggplot() +
aes(x = land,
y = output,
colour = "Observed") +
xlab("Land area, ha") +
ylab("Rice output, kg") +
geom_point(alpha = 0.3) +
theme(legend.position = c(0.1, 0.9)) +
scale_color_manual(
values = c('#BF382A', '#0C4B8E')) +
geom_point(
aes(y = fitted, colour = "Gitted"),
alpha = 0.3)
farm_dta %>%
mutate(fitted = fitted(fit1)) %>%
ggplot() +
aes(x = land,
y = output,
colour = "Observed") +
xlab("Land area, ha") +
ylab("Rice output, kg") +
geom_point(alpha = 0.3) +
theme(legend.position = c(0.1, 0.9)) +
scale_color_manual(
values = c('#BF382A', '#0C4B8E')) +
geom_point(
aes(y = fitted, colour = "Gitted"),
alpha = 0.3) +
scale_x_log10() +
scale_y_log10()
Linearity - validated using data
Random sampling - “accepted based on faith in data collectors”
No (Perfect) Collinearity - validated using data
No Endogeneity - OVB
Homoscedasticity (No heteroscedasticity) - validated using data
Normality - validated using data
Means: in \(y = \alpha + \beta x\); \(y\) is a linear function of \(x\).
If violated: \(\alpha\) and \(\beta\) are biased and inefficient.
Detected: with scatter plots: \(y\) against \(x\), observed/residuals against fitted).
Resolved: with a linear transformation.

Model:
lm(formula = output ~ status + land + labor, data = farm_dta)
Is the linearity assumption fulfilled?
What could be done to improve the model?
Linear transformation with log: partial (level-log or log-level) or full (log-log).
\[\ln (\text{output}) = \alpha + \beta_1 \text{status : share} + \beta_2 \text{status : mixed} \\ + \beta_3 \ln (\text{land}) + \beta_4 \ln (\text{labor}) + e\]
| Linear prod.fn. (level-level) | CD prod.fn. (log-log) | |
|---|---|---|
| (Intercept) | 6.203 (36.845) | 5.703 *** (0.202) |
| Sharecropping | 87.849 (96.953) | 0.004 (0.047) |
| Mixed | -90.608 (63.901) | 0.017 (0.031) |
| Land, ha | 2145.659 *** (111.521) | 0.679 *** (0.027) |
| Labor, hours | 1.248 *** (0.126) | 0.344 *** (0.030) |
| Num.Obs. | 1026 | 1026 |
| R2 | 0.819 | 0.843 |
| R2 Adj. | 0.819 | 0.842 |
| F | 1158.652 | 1369.377 |
Without log-log

With log-log

| Linear prod.fn. (level-level) | CD prod.fn. (log-log) | Level-log prod.fn. (level-log) | |
|---|---|---|---|
| (Intercept) | 6.203 (36.845) | 5.703 *** (0.202) | -2549.390 *** (666.234) |
| Sharecropping | 87.849 (96.953) | 0.004 (0.047) | 132.761 (154.889) |
| Mixed | -90.608 (63.901) | 0.017 (0.031) | -480.042 *** (102.642) |
| Land, ha | 2145.659 *** (111.521) | 0.679 *** (0.027) | 743.287 *** (89.588) |
| Labor, hours | 1.248 *** (0.126) | 0.344 *** (0.030) | 901.025 *** (100.797) |
| Num.Obs. | 1026 | 1026 | 1026 |
| R2 | 0.819 | 0.843 | 0.540 |
| R2 Adj. | 0.819 | 0.842 | 0.538 |
| F | 1158.652 | 1369.377 | 299.783 |
Two sub-problems:
Perfect collinearity: when present regression will not be estimated.
Near-perfect collinearity: regression works, but inference is misleading.
Problem:
none of the regressors can be written as an exact linear combinations of some other regressors in the model.
For example:
Detection: Through a regression equation
Solution: model re-specification.
\[ \begin{aligned} \hat{wage} & = \alpha + \hat\beta_1 education + \hat\beta_2 experience \\ & + \hat\beta_3 male + \hat\beta_4 female \end{aligned} \]
\(male + female = 1\)
Is there a multicollinearity problem here?
\[ \begin{aligned} \hat{output} & = \alpha + \hat\beta_1 land + \hat\beta_2 seeds + \hat\beta_3 fertilizers \\ & + \hat\beta_4 others + \hat\beta_5 total \end{aligned} \]
where \(total = seeds + fertilizers + others\)
Is there a multicollinearity problem here?
Coefficient \(\hat\beta_5\) is aliased and wont be estimated
Same model but in log:
\[ \begin{aligned} \ln (\hat{output})& = \hat\beta_1 \ln (land) + \hat\beta_2 \ln (seeds) + \hat\beta_3 \ln (fertilizers) \\ & + \hat\beta_4 \ln (others) + \hat\beta_5 \ln (total) \end{aligned} \]
where \(total = seeds + fertilizers + others\)
Is there a multicollinearity problem here?
Think!
\(log(a) + log(b) = log(a * b)\)
Danger
No, there is no collinearity because \(\ln (seeds) + \ln (fertilizers) + \ln (others) \ne \ln (total)\). This is not a linear combination! \(\ln (seeds \cdot fertilizers \cdot others) \ne \ln (total)\)
Using the production function estimated above, let us convert tenure type into a set of dummy variables:
farm_dta_coll <-
farm_dta %>%
mutate(
status_owner = ifelse(status == "owner", 1, 0),
status_share = as.integer(status == "share"),
status_mixed = as.integer(status == "mixed")
)
glimpse(farm_dta_coll)Rows: 1,026
Columns: 7
$ output <int> 7980, 4083, 2650, 4500, 16300, 17424, 3840, 2800, 950, 24…
$ land <dbl> 3.000, 2.000, 1.000, 2.000, 3.572, 3.572, 1.420, 1.420, 0…
$ labor <int> 2915, 2155, 1075, 2091, 3889, 3519, 810, 855, 460, 109, 2…
$ status <fct> owner, owner, owner, owner, share, share, mixed, mixed, m…
$ status_owner <dbl> 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, …
$ status_share <int> 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, …
$ status_mixed <int> 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
Call:
lm(formula = output ~ status_owner + status_share + status_mixed +
land + labor, data = farm_dta_coll)
Coefficients:
(Intercept) status_owner status_share status_mixed land
-84.405 90.608 178.457 NA 2145.659
labor
1.248
Call:
lm(formula = output ~ status_mixed + status_owner + status_share +
land + labor, data = farm_dta_coll)
Coefficients:
(Intercept) status_mixed status_owner status_share land
94.052 -178.457 -87.849 NA 2145.659
labor
1.248
| Linear prod.fn. (level-level) | Linear prod.fn. with dummies 1 | Linear prod.fn. with dummies 2 | |
|---|---|---|---|
| (Intercept) | 6.203 (36.845) | -84.405 (60.186) | 94.052 (93.612) |
| statusshare | 87.849 (96.953) | ||
| statusmixed | -90.608 (63.901) | ||
| land | 2145.659 *** (111.521) | 2145.659 *** (111.521) | 2145.659 *** (111.521) |
| labor | 1.248 *** (0.126) | 1.248 *** (0.126) | 1.248 *** (0.126) |
| status_owner | 90.608 (63.901) | -87.849 (96.953) | |
| status_share | 178.457 + (107.992) | ||
| status_mixed | -178.457 + (107.992) | ||
| Num.Obs. | 1026 | 1026 | 1026 |
| R2 | 0.819 | 0.819 | 0.819 |
| R2 Adj. | 0.819 | 0.819 | 0.819 |
| F | 1158.652 |
When two variables \(x_1\) and \(x_2\) are highly correlated.
And both (\(x_1\) and \(x_2\)) affect \(y\) significantly.
\(x_1\) and \(x_2\) are collinear
Estimated Standard Errors are inflated (larger then they could be).
Inference about \(x_1\) and \(x_2\) (only) is misleading.
Variance Inflation Factor
Step-wise regression approach:
Find different independent variables.
Drop one if it is redundant and repeating.
Keep both and ignore if \(x_1\) and \(x_2\) are just control variables.
Keep is removing may cause the OVB.
# Check for Multicollinearity
Low Correlation
Term VIF VIF 95% CI Increased SE Tolerance Tolerance 95% CI
status 1.02 [1.00, 1.49] 1.01 0.98 [0.67, 1.00]
log(land) 4.36 [3.93, 4.87] 2.09 0.23 [0.21, 0.25]
log(labor) 4.38 [3.94, 4.89] 2.09 0.23 [0.20, 0.25]
If VIF > 10, we may suspect multicollinearity.
Removing land or labor will cause the OVB (omitted variable bias), we must keep both variables.
\[ \begin{aligned} \hat{output} = \hat\beta_1 land + \hat\beta_2 seeds + \hat\beta_3 fertilizers + \hat\beta_4 others \end{aligned} \]
where \(seeds\) and \(fertilizers\) highly correlate between each other (r=0.9),
VIF of \(seeds\) and \(fertilizers\) is > 12.2
our key-interest variable is \(land\).
As \(fertilizers\) is a control variable and we may have OVB if we remove it,
If we really want to reduce VIF…:
Same model but with a quadratic term:
\[\hat{output} = \hat\beta_1 land + \hat\beta_2 land^2 + \hat\beta_3 seeds + \hat\beta_4 fertilizers + \hat\beta_5 others\]
Step-wise approach to regression analysis:
| Model 1 | Model 2 | Model 3 | Model 4 | |
|---|---|---|---|---|
| (Intercept) | 4.997*** (0.098) | -20.158*** (2.726) | -10.254*** (1.553) | -1.278 (11.509) |
| muniPrecip | -0.009+ (0.005) | -0.010*** (0.002) | -0.010*** (0.002) | -0.011*** (0.002) |
| year | 0.013*** (0.001) | -0.011 (0.014) | ||
| log(muniPop) | 1.025*** (0.104) | 1.917 (1.138) | ||
| Num.Obs. | 24 | 24 | 24 | 24 |
| R2 | 0.148 | 0.832 | 0.848 | 0.852 |
| R2 Adj. | 0.110 | 0.815 | 0.833 | 0.830 |
Note: ^^ Model 1: log(muniUse) ~ muniPrecip
Model 2: log(muniUse) ~ muniPrecip + year
Model 3: log(muniUse) ~ muniPrecip + log(muniPop)
Model 4: log(muniUse) ~ muniPrecip + year + log(muniPop)
\[ Var(u|x_{i1}, x_{i2}, \cdots , x_{ik}) = \sigma^2 \]
Problem: when \(Var(u|x_{i1}, x_{i2}, \cdots , x_{ik}) \ne \sigma^2\)
Detection:
Re-specify the model/ choose different regressors;
Correct SE with alternative estimation procedures
Use a weighted regression estimated with Generalized Linear Model (GLM) estimator instead of OLS;
See also: (Angrist & Pischke, 2009, Ch. 3.4), “Assumption AMLR.5” in (Wooldridge, 2020)
lm(formula = output ~ status + land + labor, data = farm_dta)
lm(formula = output ~ status + log(land) + log(labor), data = farm_dta)
lm(formula = log(output) ~ status + log(land) + log(labor), data = farm_dta)
lm(formula = output ~ status + land + labor, data = farm_dta)
Same idea as Breusch-Pagan test. Assumes that residuals variance is a function of polynomial of regressors:
\[ \text{residuals} = \log(\text{land}) + \log(\text{labor}) + \log(\text{land}) ^ 2 + \log(\text{labor})^2 \]
lm(formula = output ~ status + land + labor, data = farm_dta)
Methods of correcting the variance-covariance matrix.
Robust estimators for variance covariance matrix:
sandwich::vcovHC - heteroskedasticity consistent
sandwich::vcovCL - clustered SE
clubSandwich::vcovCR - clustered heteroskedasticity consistent SE
sandwich::vcovHAC - heteroskedasticity and autocorrelation consistent
Estimation methods:
HC3 - optimal one as per (Long & Ervin, 2000)HC1 - default in Statalm(formula = output ~ status + land + labor, data = farm_dta)
Regular vcov
| (Intercept) | statusshare | statusmixed | land | labor | |
|---|---|---|---|---|---|
| (Intercept) | 1357.56 | -997.12 | -909.30 | -383.44 | -0.71 |
| statusshare | -997.12 | 9399.81 | 910.48 | -15.30 | 0.24 |
| statusmixed | -909.30 | 910.48 | 4083.37 | -146.28 | 0.16 |
| land | -383.44 | -15.30 | -146.28 | 12437.02 | -12.75 |
| labor | -0.71 | 0.24 | 0.16 | -12.75 | 0.02 |
Robust vcov
| (Intercept) | statusshare | statusmixed | land | labor | |
|---|---|---|---|---|---|
| (Intercept) | 4235.06 | -3084.98 | 249.07 | -6038.87 | -5.91 |
| statusshare | -3084.98 | 11437.98 | 799.53 | -2421.05 | 8.76 |
| statusmixed | 249.07 | 799.53 | 2692.17 | 1349.86 | -4.71 |
| land | -6038.87 | -2421.05 | 1349.86 | 75901.71 | -62.24 |
| labor | -5.91 | 8.76 | -4.71 | -62.24 | 0.09 |
lm(formula = output ~ status + land + labor, data = farm_dta)
| Linear prod.fn. (level-level) regular SE | |
|---|---|
| (Intercept) | 6.203 (36.845) |
| Sharecropping | 87.849 (96.953) |
| Mixed | -90.608 (63.901) |
| Land, ha | 2145.659 *** (111.521) |
| Labor, hours | 1.248 *** (0.126) |
| Num.Obs. | 1026 |
| R2 Adj. | 0.819 |
| Linear prod.fn. (level-level) robust SE | |
|---|---|
| (Intercept) | 6.203 (68.312) |
| Sharecropping | 87.849 (111.881) |
| Mixed | -90.608 + (53.100) |
| Land, ha | 2145.659 *** (291.480) |
| Labor, hours | 1.248 *** (0.312) |
| Num.Obs. | 1026 |
| R2 Adj. | 0.819 |
| Std.Errors | HC3 |
lm(formula = log(output) ~ status + log(land) + log(labor), data = farm_dta)
| CD prod.fn. (level-level) regular SE | |
|---|---|
| (Intercept) | 5.703 *** (0.202) |
| Sharecropping | 0.004 (0.047) |
| Mixed | 0.017 (0.031) |
| Land, ha | 0.679 *** (0.027) |
| Labor, hours | 0.344 *** (0.030) |
| Num.Obs. | 1026 |
| R2 Adj. | 0.842 |
| CD prod.fn. (level-level) robust SE | |
|---|---|
| (Intercept) | 5.703 *** (0.263) |
| Sharecropping | 0.004 (0.048) |
| Mixed | 0.017 (0.028) |
| Land, ha | 0.679 *** (0.036) |
| Labor, hours | 0.344 *** (0.039) |
| Num.Obs. | 1026 |
| R2 Adj. | 0.842 |
| Std.Errors | HC3 |
Watch:
Reproduce analysis from the slides in R.
Assumptions and how to validated them.
Statistical plots, measures (VIF), statistical tests and how to interpret them.