A production function describes the physical relationship between inputs and output. All production is characterised by an output and one or more inputs. Suppose that you produce output \(y\) using inputs \(x_n\) with input \(x_1\) being variable and \(x_2...x_n\) fixed, then the input/output relationship can be described as follow:
\[ y = f(x) =TPP= f(x_1 |x_2...x_n) \]
The functional form, as the shape of the production function depends on the nature of the specific production activity and determines the properties of the production relationship, specifically the..
Production functions implicitly assumes engineering efficiency but nothing is assumed regarding economic efficiency.
There are two kinds of production function studies, 1) engineering or controlled experiment studies and 2) inter-firm studies.
Examples of the use of engineering functions in agriculture includes livestock feeding experiments, fertiliser trials in crops and manufacturing process efficiency studies. To data you have only been confronted by engineering production functions, do you recall the neoclassical production function?
Inter-firm production functions, are not fitted to data generated from controlled experiments where one or more inputs are varied and its impact on output is captured. Instead these studies rely on firm or industry level data typically not even collected for the purpose of fitting production functions. Whilst we’ll do a quick recap of the engineering functions that you’ve seen to date, our focus in this course is to transition to the use of production economics for inter-firm analysis, specifically for the comparison of 1) marginal products of inputs, 2) returns to scale and 3) substitution elasticities among inputs.
From your undergraduate studies you will recall the neoclassical production function is defined as follow. Lets do a quick recap and add the corresponding mathematical expression thereof.
Figure 1: The neoclassical production function. Source: Debertin (2012)
TPP is the total physical product or output
MPP is the marginal physical product as the rate of change in TPP, it represents the additional output of \(y\) for one additional unit of \(x\) applied. From school you would recall that the rate of change is synonymous with the slope of a function, an estimate for which can be calculated by dividing the change(\(\Delta\)) in \(y\) by the change(\(\Delta\)) in \(x\) as \(MPP=\frac{\Delta y}{\Delta x}\). The exact slope at a particular point can be determined by taking the first derivative of the of the function i.e. \[MPP = f'(x)= \frac{dy}{dx}\]
APP is the average physical product is the output per unit of input applied. In other words, it represents the productivity of the production process \[APP = \frac{y}{x}\]
The neoclassical production function exhibits the following properties
Suppose that you produce maize using a single variable input, nitrogen (N), and a number of fixed inputs. Further suppose that the input-output relationship is represented by the following function:
\[y =f(x)= TPP= 0.75x + 0.0042x^2-0.000023x^3\] Where \(y\) is the maize yield level in bushels per acre \(x\) is the amount of nitrogen applied in pounds per acre
Lets translate this information into R code for plotting and further analysis. To start with, lets create a data.table with N values and then define a R-function with which we can calculate TPP for plotting.
remove(list=ls()) #clear all from memory
library("data.table")
library("ggplot2")
#create a data.table with one variable called "N" with a value of between 0 and 240 with an interval of 5
dat <- data.table(N = seq(0,240,by=5))
TPP <- function(x) {
0.75*x + 0.0042*x^2 - 0.000023*x^3
}
dat[, yield := TPP(N)]
p1 <-
ggplot(data=dat,aes(y=yield, x=N)) +
geom_line() +
labs(x= "Nitrogen applied (pounds per acre)", y ="Maize yield (bu/ac)") +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10),
expand = c(0, 0),limits = c(0,250)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10),
expand = c(0, 0),limits = c(0,max(dat$yield)+25)) +
annotate("text", x = 240,y = 120, label = "TPP",size = 3.5) + #add APP text
theme_bw()
p1
Figure 2: The production function \(y =f(x)= TPP= 0.75x + 0.0042x^2-0.000023x^3\)
Now lets do the same for calculating the MPP and APP
MPP <- function(x){
0.75 + 0.0042*2*x -0.000023*3*x^2 # fist derivative of f(x)
}
APP <- function(x) {
(0.75*x + 0.0042*x^2 - 0.000023*x^3)/x
}
dat[, APP := APP(N)]
dat[, MPP := MPP(N)]
p2 <-
ggplot(data=dat) +
geom_line(aes(y=APP, x=N)) +
geom_line(aes(y=MPP,x=N)) +
labs(x= "Nitrogen applied (pounds per acre)", y ="MPP and APP") +
geom_hline(yintercept = 0,colour = "red") + #add horisontal red line at 0
scale_y_continuous(breaks = scales::pretty_breaks(n = 10),
expand = c(0, 0),limits = c(min(dat$MPP),max(dat$MPP)+0.6)) +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10),
expand = c(0, 0),limits = c(0,250)) +
annotate("text", x = 240,y = 0.6, label = "APP",size = 3.5) + #add APP text
annotate("text", x = 240,y = -1, label = "MPP",size = 3.5) + #add MPP text
theme_bw()
#plot the two together using the grid extra package
library("gridExtra")
grid.arrange(p1,p2, nrow=2) # this can also be saved as a figure.
Figure 3: TPP, APP and MPP
Ok, now we can can also calculate and add the turning points for the respective functions the plots. \(TPP\) is greatest at its turning point where \(MPP=0=0.75 + 0.0042(2)x - (0.000023)(3)x^2\). We calculate this point manually by solving for \(f'(x)=0\) using \(x =\frac {b\pm\sqrt{b^2-4ac}}{2a}\) or we can do it in R as below:
solve.quad <- function(a,b,c){
if( b^2-4*a*c > 0){ # first case D>0
x_1 = (-b+sqrt(b^2-4*a*c))/(2*a)
x_2 = (-b-sqrt( b^2-4*a*c))/(2*a)
result = c(x_1,x_2)
}
else if(delta(a,b,c) == 0){ # second case D=0
x = -b/(2*a)
}
else {"There are no real roots."} # third case D<0
}
TPP_max <- solve.quad(-0.000023*3, 0.0042*2, 0.75)
TPP_max
## [1] -59.85603 181.59516
Note that since its a quadratic equation \(MPP\) has two points where it is equal to zero, therefore if we extend the N applied far enough into negative territory well find another turning point as its minimum value. Therefore saying that output is maximised where \(MPP = 0\) is technically incorrect since its merely a necessary condition for output maximisation. To know if output is in fact maximised we also have to establish if the sufficient condition is met. To do so we have to do the so called second derivative test where set the values of \(x\), in this instance \(-59.85603\) and \(181.59516\) into the second derivative of the function \(f''(x)=MPP'\). If it is smaller than \(0\) we know that the function is concave, i.e. open to the bottom, and thus at its maximum point. The necessary and sufficient conditions are also referred to as the first and second order conditions and particularly relevant with profit maximisation as you will see later.
#MPP = 0.75 + 0.0042*2*x - 0.000023*3x^2 therefore
#MPP' = 0.0042*2 - 0.000023*3*2x therefore
#Maximum value
0.0042*2 - 0.000023*3*2*TPP_max[2]
## [1] -0.01666013
#Minimum value
0.0042*2 - 0.000023*3*2*TPP_max[1]
## [1] 0.01666013
The second important point to calculate is where the slope of the \(APP\) function is equal to \(0\) since its the point at which the productivity of the production process will be at its greatest. You will recall that \[APP = \frac{y}{x}=\frac{f(x)}{x} = 0.75 + 0.0042x -0.000023x^2\] Max \(APP\) is where \(APP'\)=0 therfore
\[\begin{equation} APP' = 0.0042 -0.000023(2)x =0\\ 0.000023(2)x=0.0042\\ \end{equation}\]
APP_max <- 0.0042/(0.000023*2)
APP_max
## [1] 91.30435
The term elasticity is used by economists when discussing relationships between two variables. An elasticity is a number that represents the ratio of two percentages. Any elasticity is a pure number in that it has no units.
The elasticity of production is defined as the percentage change in output divided by the percentage change in input, as the level of input use is changed. Suppose that \(x'\) represents some original level of input use that produces \(y'\) units of output. The use of \(x\) is then increased to some new amount called \(x''\), which in turn produces \(y''\) units of output. The elasticity of production (Ep) is defined by this formula:
\[ E_p = \frac{y'-y''}{y}/\frac{x'-x''}{x}\] From section 2.1.1 this can be rewritten as
\[ E_p = \frac{\Delta y}{y}/\frac{\Delta x}{x}\] which in turn can be rewritten as
\[ E_p = \frac{\Delta y}{y}.\frac{x}{\Delta x} = \frac{\Delta y}{\Delta x}.\frac{x}{y} \] Since \(MPP=\frac{\Delta y}{\Delta x}\) and \(APP=\frac{y}{x}\) then \(E_p\) can be written as:
\[ E_p=\frac{MPP}{APP} \] So what does this mean? Suppose that the elasticity of production (\(E_p\)) is large. This would imply that \(MPP\) is large relative to \(APP\), in other words the increase in output (\(TPP\)) for one additional unit of input applied is be large relative to the average output obtained from all inputs applied. The elasticity of production can also illustrated visually with the neoclassical production function.
p3 <-
p1 +
geom_vline(xintercept = TPP_max[2], linetype=2) + #TPP_max is a list of two items and we want second one
geom_vline(xintercept = APP_max,linetype=2) +
annotate("text", x = APP_max + 5,y = 150, label = round(APP_max,0) ,size = 3.5) + #note: APP_max rounded to 0
annotate("text", x = TPP_max + 5,y = 150, label = round(TPP_max,0) ,size = 3.5) #note: APP_max rounded to 0
p4 <-
p2 +
geom_vline(xintercept = TPP_max[2], linetype=2) + #TPP_max is a list of two items and we want second one
geom_vline(xintercept = APP_max,linetype=2) +
annotate("text", x = (APP_max+TPP_max[2])/2,y = 1.3, label = "1 > Ep > 0" ,size = 3.5) +
annotate("text", x = APP_max/2,y = 1.3, label = " Ep > 1" ,size = 3.5) +
annotate("text", x = TPP_max[2] + (240-TPP_max[2])/2 ,y = 1.3, label = " Ep < 0" ,size = 3.5)
grid.arrange(p3,p4, nrow=2) # this can also be saved as a figure.
Figure 4: Elasticity of production
Whilst production functions enables us to answer questions such as how much input to apply to produce most productively or to maximise output, they do not help us to answer question on how to maximise the economic efficiency of production. To answer the latter we can approach the problem from two perspectives, we can either look at it from the perspective of maximsing profits or minimising costs.
The maximisation of profit can be defined from the perspective of the 1) amount of output produced or 2) amount of inputs applied. Both of these yield the same results and will be illustrated below.
Suppose that a firm is operating in a perfectly competitive market and thus can sell/buy as much output/input as required without influencing the market price for output/input. Therefore the price of output (\(P_y\)) does not vary irrespective of the amount produced and the same applies to the input price \(P_{x_1}\) irrespective of the amount of inputs purchased. In such a market the total revenue obtained from production is also called the total value product (\(TVP\)) and can be expressed mathematically as follow:
\[TVP=TPP.P_y= P_y .y\] An accompanying the concept is the value marginal product (\(VMP\)) which is defined as the value of the incremental unit of output resulting from an additional unit of \(x\) applied when \(y\) sold for a constant market price \(P_y\). Thus \(VMP\) is simply the slope of the \(TVP\) curve and equal to \(MPP.P_y\). Similarly the average value product (\(AVP\)) is the average value per unit of output produced at a particular point and is equal to \(APP.P_y\).
Now that we have looked at the revenue side, we must also look at the cost side where total factor cost \(TFC\) is equal to the price per unit of input (\(P_x\)) times number if units of input applied (\(x\)). Since the price of the input stays constant given that perfect competition is assumed, the \(TFC\) function is a straight line that extends from the origin and has a constant slope equal to \(P_{x_1}\). THis slope has a special name as the marginal factor cost (\(MFC\)) which is the cost of one additional unit of input applied (and thus equal to \(P_{x_1}\).
To maximise profit the farmer must maximise the difference between costs and returns. Profit (\(\Pi\)) is equal to total value product (\(TVP\)) less the sum of total factor (\(TFC\)) and fixed costs (\(A\)). The profit function can be expressed as follow:
\[\begin{equation} \Pi = TVP - (TFC + A) \\ = TVP - TC = P_y.y-(x_1.P_{x_1} + \sum_{i=2}^{n} x_i.P_{x_i}) \\ \end{equation}\]
Note that \(x_1\) is the only variable input but we also have a number of fixed inputs \(x_2...x_n\). Therefore total fixed cost (\(TC\)) is equal to \(\sum_{i=2}^{n} xP_{x_i}\).
Profit is maximised or minimised where the slope of the profit function is equal to 0 and where the slopes of the \(TVP\) and \(TFC\) are equal, in other words where \(VMP = MFC\). Whilst this can be proven mathematically, it can also be easily illustrated graphically by extending our example to to include costs.
\[\begin{equation} VMP = MFC \\ \\ MPP.P_y = P_{x_i} \\ MPP = \frac{P_{x_i}}{P_y} \\ \end{equation}\]
Lets suppose that the maize price (\(P_{y}\)) is $4 per bushel and the price of nitrogen (\(P_{x_1}\)) is $2.5 per pound and the fixed cost is $40, how much output should we produce to maximise profit?
dat[, Py := 4]
dat[, Px := 2.5]
dat[, A := 40]
dat[, TVP := Py*yield]
dat[, TFC := Px*N]
dat[, TC := round(TFC + A,3)] #Total cost rounded to three decimal places
dat[, profit := round(TVP - TC,3)] # Profit rounded to three decimal places
dat[, VMP := round(Py*MPP,3)] # VMP rounded to three decimal places
dat[, AVP := round(Py*APP,3)] # AVP rounded to three decimal places
dat[, MFC := Px]
head(dat)
## N yield APP MPP Py Px A TVP TFC TC profit
## 1: 0 0.000000 NaN 0.750000 4 2.5 40 0.0000 0.0 40.0 -40.000
## 2: 5 3.852125 0.770425 0.790275 4 2.5 40 15.4085 12.5 52.5 -37.091
## 3: 10 7.897000 0.789700 0.827100 4 2.5 40 31.5880 25.0 65.0 -33.412
## 4: 15 12.117375 0.807825 0.860475 4 2.5 40 48.4695 37.5 77.5 -29.030
## 5: 20 16.496000 0.824800 0.890400 4 2.5 40 65.9840 50.0 90.0 -24.016
## 6: 25 21.015625 0.840625 0.916875 4 2.5 40 84.0625 62.5 102.5 -18.438
## VMP AVP MFC
## 1: 3.000 NaN 2.5
## 2: 3.161 3.082 2.5
## 3: 3.308 3.159 2.5
## 4: 3.442 3.231 2.5
## 5: 3.562 3.299 2.5
## 6: 3.668 3.362 2.5
We can also calculate the \(MPP\) and level of nitrogen for maximum profit.
price_ratio <- dat[1,Px/Py] #we do not want to calculate this across all of the rows, lets just use the first one
price_ratio
## [1] 0.625
Ok, so we know that \(MPP= 0.75 + 0.0042(2)x -0.000023(3)x^2\) and we know that profit is maximised where \(MPP=0.625\), therefore we can use the quadratic equation again to slove for \(0.625 = 0.75 + 0.0042(2)x -0.000023(3)x^2\).
Profit_max <- solve.quad(-0.000023*3, 0.0042*2, (0.75-0.625))
Profit_max
## [1] -13.40491 135.14404
Ok, you would recall the discussion regarding necessary and sufficient conditions. Luckily the point of profit maximisation is clear but if you had a more complex function you would have had to calculate the second derivative of the profit function and set the values of \(x\) into it to see where the second derivative is negative. Now that all of the calculations are out of the way, lets plot them out starting with \(TVP\), \(TC\) and \(A\) curves.
p5 <-
ggplot(data = dat) +
geom_line(aes(y = TVP, x = N)) +
geom_line(aes(y = TC , x = N)) +
geom_line(aes(y = A , x = N)) +
geom_vline(xintercept = Profit_max[2],linetype=2,colour="blue") + #max profit
geom_vline(xintercept = TPP_max[2], linetype=2) + #start of phase II
geom_vline(xintercept = APP_max,linetype=2) + #start of phase III
labs(y = "TVP or TC ($/acre)", x= "Nitrogen (pounds/acre)") +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10),
expand = c(0, 0),limits = c(0,max(dat$TVP)+100)) +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10),
expand = c(0, 0),limits = c(0,250)) +
annotate("text", x = 240,y = 460, label = "TVP",size = 3.5) + #add TVP text
annotate("text", x = 240,y = 580, label = "TC",size = 3.5) + #add TC text
annotate("text", x = 240,y = 90, label = "A",size = 3.5) + #add A text
theme_bw()
Now lets plot the \(VMP\), \(AVP\) and \(MFC\) curves
p6 <-
ggplot(data = dat) +
geom_line(aes(y = VMP, x = N)) +
geom_line(aes(y = AVP, x = N)) +
geom_line(aes(y = MFC, x = N)) +
geom_hline(yintercept = 0,colour = "red") + #add horisontal red line at 0
geom_vline(xintercept = Profit_max[2],linetype=2,colour="blue") + #max profit
geom_vline(xintercept = TPP_max[2], linetype=2) + #start of phase II
geom_vline(xintercept = APP_max,linetype=2) + #start of phase III
labs(y = "VMP, AVP or MFC ($/acre)", x= "Nitrogen (pounds/acre)") +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10),
expand = c(0, 0),limits = c(min(dat$VMP)-0.3,max(dat$VMP)+0.3)) +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10),
expand = c(0, 0),limits = c(0,250)) +
annotate("text", x = 240,y = -4, label = "VMP",size = 3.5) + #add VMP text
annotate("text", x = 240,y = 2.1, label = "AVP",size = 3.5) + #add AVP text
annotate("text", x = 240,y = 2.8, label = "MFC",size = 3.5) + #add MFC text
theme_bw()
Now lets plot the \(\Pi\) function and put them together
p7 <-
ggplot(data = dat) +
geom_line(aes(y = profit,x = N)) + labs(y = "Profit ($/acre)", x= "Nitrogen (pounds/acre)") +
geom_hline(yintercept = 0,colour = "red") + #add horisontal red line at 0
geom_vline(xintercept = Profit_max[2],linetype=2,colour="blue") + #max profit
geom_vline(xintercept = TPP_max[2], linetype=2) + #start of phase II
geom_vline(xintercept = APP_max,linetype=2) + #start of phase III
scale_y_continuous(breaks = scales::pretty_breaks(n = 10),
expand = c(0, 0),limits = c(min(dat$profit)-10,max(dat$profit)+10)) +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10),
expand = c(0, 0),limits = c(0,250)) +
theme_bw()
grid.arrange(p5,p6,p7, nrow=3) # this can also be saved as a figure.
## Warning: Removed 1 rows containing missing values (geom_path).
Figure 5: TVP, Marginal values and profit
Note that profit is negative whenever the \(TC\) curve is above the total value product curve. Also note that fixed costs (\(A\)) does not influence the the optimal output level since it does not change the slope of the \(TC\) function. The only point of influence thereof is on the levels of the profit function and not the shape thereof, i.e. it moves it up or down on the vertical axis.
Profit is maximised from an output perspective where \(P_y = MC\) where \(MC\) is the slope of the \(TC\) function as \[TC = TFC + A = x_1.P_{x_1} + \sum_{i=2}^{n} x_i.P_{x_i}\]
In production economics we talk about the so called stages of production, this will become particularly relevant in the next lectures since some functional forms are only defined for specific stages. Stages I and III have traditionally been described as irrational stages of production. The terminology suggests that a farm manager would never choose levels of input use within these regions unless the behaviour were irrational. Irrational behaviour describes a farmer who chooses a goal inconsistent with the maximization of net returns, or profit. Stage II is sometimes called the rational stage, or economic region of production. This terminology suggests that rational farmers who have as their goal profit maximization will be found operating within this region. However, in certain instances, such as when dollars available for the purchase of inputs are limited, a rational farmer may not always operate in stage II of the production function.
Stage I of the neoclassical production function includes input levels from zero units up to the level of use where \(MPP = APP\). Stage II includes the region from the point where \(MPP = APP\) to the point where the production function reaches its maximum and \(MPP\) is zero. Stage III includes the region where the production function is declining and \(MPP\) is negative.
I find it easiest to remember the stages of production in terms of the elasticity of production. Stage I is where \(E_p>1\), stage II is where \(1>E_p>0\) and stage II is where \(E_p<0\).
It is easy to understand why a rational farmer interested in maximizing profits would never choose to operate in stage III. It would never make sense to apply inputs if, on so doing, output was reduced. Even if fertilizer were free, a farmer would never apply fertilizer beyond the point of output maximum. Output could be increased and costs reduced by reducing the level of input use. The farmer would always make greater net return by reducing the use of inputs such that he or she were operating at stage II instead.
A farmer would not choose to produce in the region where MPP is increasing in the first part of stage I, if output prices were constant and sufficient funds were available for the purchase of \(x\). In this region, the marginal product of the input is increasing as more and more of the input is used. Diminishing marginal returns have not yet set in, and each additional unit of input used will produce a greater and greater additional net return. The additional return occurs despite the fact that for the first few units, the MPP for the incremental unit might still be below the cost of the incremental unit of \(x\), as represented by the constant MFC function (see Figure 5). A farmer would also not want to produce at a level where \(APP\) is increasing since this would mean that the productivity of inputs applied is still increasing. It would only make sense to produce at a point beyond which maximum productivity is reached.