Estoy tratando de usar R para mi práctica de Macro y el modelo de resolver para el precio de equilibrio donde la curva de demanda inversa PD(q) y la curva de oferta P.
¿Cómo lo hago? Gracias.
Estoy tratando de usar R para mi práctica de Macro y el modelo de resolver para el precio de equilibrio donde la curva de demanda inversa PD(q) y la curva de oferta P.
¿Cómo lo hago? Gracias.
Nota 1.: Es de mala educación editar una pregunta después de haberla respondido; tuve que hacer ediciones importantes para que mi respuesta fuera coherente.
Nota 2.: no se trata de un sistema de ecuaciones. Hay dos funciones definidas, pero sólo una ecuación: $$P_D(q) - P_S(q) = 0$$
Lo que ayuda aquí es que la demanda inversa disminuye en cantidad mientras que la oferta inversa aumenta. Así que dado cualquier $q$ , si $P_D(q) > P_S(q)$ sabemos que $q$ está por debajo del valor de equilibrio de $q^*$ y si $P_D(q) < P_S(q)$ entonces $q > q^*$ .
También puede acotar la gama $q^*$ se puede encontrar en. Claramente $q^* \geq 0$ .
También $P_D(q)$ no debe caer en territorio negativo, por lo que puede encontrar un $\bar{q}$ para lo cual $P_D(q) \leq 0$ . Se puede hacer fácilmente partiendo de $\bar{q} = 1$ , evaluando $P_D(\bar{q})$ y la duplicación $\bar{q} = 1$ si $P_D(\bar{q}) > 0$ .
Dado el intervalo $I = [0, \bar{q}]$ que sabemos que contiene $q^*$ Ahora puede solicitar reducción del intervalo a la mitad .
Un algoritmo para aproximar $q^*$ con el nivel de precisión deseado $\epsilon$ :
Definir el intervalo $I = [0, \bar{q}]$ .
Inicio del Bucle
Seleccione el punto medio del intervalo como una "suposición" para $q^*$ . (En la primera iteración esto es $q = \bar{q}/2$ .)
Evaluar la declaración $P_D(q) > P_S(q)$ .
Si es cierto entonces
$q^*$ debería ser menor, la solución está en la mitad inferior del intervalo, por lo que en la siguiente iteración utilizaremos ese como nuestro nuevo intervalo $I$ .
Si es falso entonces
$q^*$ debería ser mayor, la solución está en la mitad superior del intervalo, por lo que en la siguiente iteración utilizaremos ese como nuestro nuevo intervalo $I$ .
Evaluar la declaración el nuevo intervalo es muy pequeño es decir, tiene una longitud inferior a $2\epsilon$ .
Si es cierto entonces
seleccione su punto medio y diga que se ha aproximado $q^*$ con una precisión razonable, fin del programa.
Si es falso entonces
Ir al inicio del BUCLE.
Esto se basa en la respuesta de @Giskard más arriba.
Una vez que conozcas el rango de cantidades factibles para el equilibrio del mercado, $q \in [ 0, \bar q ]$ se puede aplicar directamente la función de R uniroot
función ( R manual ), que busca en un intervalo dado los ceros de una función.
# What are my demand and supply functions? 1 - q and q, because economics.
P_D <- function ( q ) { 1 - q }
P_S <- function ( q ) { q }
# Set @Giskard's upper bound for the search
qbar <- 1
# Find the equilibrium quantity
uniroot( function ( q ) { P_D( q ) - P_S( q ) }, lower = 0, upper = qbar )
##########
# OUTPUT #
##########
#
# $root
# [1] 0.5
#
# $f.root
# [1] 0
#
# $iter
# [1] 1
#
# $init.it
# [1] NA
#
# $estim.prec
# [1] 0.5
Después de encontrar la intersección, verifique que $.root == 0
o está dentro de una tolerancia de cero.
Si te da pereza, puedes poner qbar <- 1e9
(por ejemplo) y seguirá comportándose razonablemente bien. Tenga cuidado si adopta este enfoque, en caso de que sus funciones de demanda y oferta no sean monótonas en intervalos económicamente irrelevantes.
Según mi comentario en la respuesta de @Giskard, también podría implementar esta búsqueda como
optimize( function ( q ) { abs( P_D( q ) - P_S( q ) ) }, interval = c( 0, qbar ) )
Sin embargo, R tiene una función de búsqueda de raíces incorporada ( uniroot
), así que por qué no utilizarlo.
FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.