set.seed(2023)
price = sort(runif(min=250,max=550,n=100))
price = price+rnorm(100,60) # <--- generar ruido en los datos
area=sort(runif(min=45,max=120,n=100))
df1=data.frame(price,area)
#Metodo para crear datos
df2=faux::rnorm_multi(n=100,vars=2,mu=c(5,6),sd=c(0.6,0.7),
r = 0.8,varnames=c("DE","DL"))
df2$DE[1]=4;df2$DL[1]=7.2
par(mfrow=c(1,2))
plot(x=df1$area,y=df1$price,pch=16,cex=0.5)
plot(x=df2$DE,y=df2$DL,pch=16,cex=0.7)## $cor.cla
## [1] 0.7406071
##
## $cor.rob
## [1] 0.8280354
Un dato atipico no se considera como tal solo por ser muy extremo o muy
pequeño.
Correlación se habla de dos variables aleatorios. Se trata entre pares de variables aleatorias.
Los residuales conforman el vector de los residuales, residual: distancia entre los puntos y la recta
#Estimando intercepto y pendiente
# de minimos cuadrados
plot(x=df1$area,y=df1$price,pch=16,cex=0.5)
mod1=lm(df1$price~df1$area)
summary(mod1)##
## Call:
## lm(formula = df1$price ~ df1$area)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.374 -5.409 0.130 5.057 16.238
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 159.7993 2.6775 59.68 <2e-16 ***
## df1$area 3.6735 0.0307 119.65 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.826 on 98 degrees of freedom
## Multiple R-squared: 0.9932, Adjusted R-squared: 0.9931
## F-statistic: 1.432e+04 on 1 and 98 DF, p-value: < 2.2e-16
#Estimación de errores estandar por montecarlo
# Mediante simulación se pueden ordenar los datos. Cosa que con el error de r se daña debido a que en esta formula no se pueden ordenar los datos.
# Intercepto y la pendiente
sim1=replicate(1500, sort(runif(min=250,max=550,n=100))+price+rnorm(100,90,20))
dim(sim1)## [1] 100 1500
#100 datos de precio, 1500 simulaciones
intercept=c()
pendiente=c()
rsq=c()
for(i in 1:ncol(sim1)){
mod=lm(sim1[,i]~area)
intercept[i]=coef(mod)[1]
pendiente[i]=coef(mod)[2]
rsq[i]=unlist(summary(mod))$adj.r.squared
}
# Error estandar de los interceptos
sd(intercept)## [1] 18.35944
## [1] 0.1955441
#p = faux::rnorm_multi(n=100,vars=2,mu=c(5,6),sd=c(0.6,0.7),
# r = 0.8,varnames=c("DE","DL"))$DE
sim2 = replicate(1500, faux::rnorm_multi(n=100,vars=2,mu=c(5,6),sd=c(0.6,0.7),
r = 0.8,varnames=c("DE","DL"))$DE)
dim(sim2)## [1] 100 1500
interceptb=c()
pendienteb=c()
rsqb=c()
#model <- lm(y ~ unlist(x))
for(i in 1:ncol(sim2)){
mod=lm(sim2[,i]~area)
interceptb[i]=coef(mod)[1]
pendienteb[i]=coef(mod)[2]
rsqb[i]=unlist(summary(mod))$adj.r.squared
}
# Error estandar de los interceptos
sd(interceptb)## [1] 0.2314262
## [1] 0.002659694