Crear una función para estimar un modelo de regresión lineal por MCO

A continuación se genera un caso particular de la función

x=1:30
y=3+(5*x)

beta1=sum(y*(x-mean(x)))/sum((x-mean(x))^2)
beta0=mean(y)-(mean(x)*beta1)
res=data.frame(beta0,beta1)
res
##   beta0 beta1
## 1     3     5

Ahora con este caso particular vamos a generalizarlo en una función:

model_lineal_mco=function(x,y){
beta1=sum(y*(x-mean(x)))/sum((x-mean(x))^2)
beta0=mean(y)-(mean(x)*beta1)
res=data.frame(beta0,beta1)
plot(x,y)
y_est=beta0+(beta1*x)
lines(x,y_est,col="red")
return(res)
}

model_lineal_mco(x = x,y = y)

##   beta0 beta1
## 1     3     5

Vamos a probar la función con otros datos:

data(cars)
head(cars)
##   speed dist
## 1     4    2
## 2     4   10
## 3     7    4
## 4     7   22
## 5     8   16
## 6     9   10
model_lineal_mco(x = cars$speed,y = cars$dist)

##       beta0    beta1
## 1 -17.57909 3.932409

Ejemplo Maxima Verosimulitud

A continuación se muestra un ejemplo de MV para el caso del modelo poisson:

x=c(15,16,23,12,18,22)
dpois(x = 15,lambda = 12)
## [1] 0.07239112
prod(dpois(x = x,lambda = 12))
## [1] 5.456965e-11
lambda=1:25
verosim=array(NA,25)
for(i in 1:25){
verosim[i]=prod(dpois(x = x,lambda = i))
}

data.frame(lambda,verosim)
##    lambda      verosim
## 1       1 1.016658e-96
## 2       2 2.044502e-67
## 3       3 2.346897e-51
## 4       4 1.019139e-40
## 5       5 4.730726e-33
## 6       6 2.899833e-27
## 7       7 8.973581e-23
## 8       8 3.121370e-19
## 9       9 2.045247e-16
## 10     10 3.591475e-14
## 11     11 2.173355e-12
## 12     12 5.456965e-11
## 13     13 6.545873e-10
## 14     14 4.185787e-09
## 15     15 1.556367e-08
## 16     16 3.609023e-08
## 17     17 5.527011e-08
## 18     18 5.861696e-08
## 19     19 4.479737e-08
## 20     20 2.551429e-08
## 21     21 1.114506e-08
## 22     22 3.827140e-09
## 23     23 1.055489e-09
## 24     24 2.381925e-10
## 25     25 4.471059e-11
plot(lambda,verosim,type="b")