Muestra del codigo de regresion lineal y explicacion

se utilizo un codigo el cual no se enlasa el formulario con el R pues no me funcionaba entonces lo que hice fue tomar este archivo exe descargandolo y subirlo directamente a R por medio de import Dataset y from text(base) cambiandole el nombre a df para que funcione

library(tidyr)
## Warning: package 'tidyr' was built under R version 4.6.1
# Cargar datos (ajusta la ruta y el nombre de tu archivo)
df = read.csv("df.csv")

colnames(df) = c("sexo","edad","gasto_ocio",
                 "horas jugadas","compro articulo","rango competitivo",
                 "ve competitivo",
                 "40000","43000","46000","49000","52000","55000",
                 "58000","61000","64000","67000","70000")

df_long = gather(df, key = "precio", value = "cantidades",
                 "40000","43000","46000","49000","52000","55000",
                 "58000","61000","64000","67000","70000")

df_long$cantidades = as.numeric(df_long$cantidades)
## Warning: NAs introducidos por coerción
df_long$precio     = as.numeric(df_long$precio)
df_long = df_long[!is.na(df_long$cantidades) & !is.na(df_long$precio), ]

n = length(df_long$cantidades)

# Regresión manual
numerador   = n * sum(df_long$cantidades * df_long$precio) - sum(df_long$cantidades) * sum(df_long$precio)
denominador = n * sum(df_long$precio^2) - (sum(df_long$precio))^2
b1 = numerador / denominador
b0 = mean(df_long$cantidades) - b1 * mean(df_long$precio)

cat("b0:", b0, "\n")
## b0: 7.721465
cat("b1:", b1, "\n")
## b1: -9.949495e-05
# Regresión con lm()
reg1 = lm(cantidades ~ precio, data = df_long)
summary(reg1)
## 
## Call:
## lm(formula = cantidades ~ precio, data = df_long)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.1447 -1.3538 -0.5477  1.0492  4.6462 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  7.721e+00  6.743e-01  11.452  < 2e-16 ***
## precio      -9.949e-05  1.180e-05  -8.434 1.19e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.818 on 318 degrees of freedom
## Multiple R-squared:  0.1828, Adjusted R-squared:  0.1802 
## F-statistic: 71.13 on 1 and 318 DF,  p-value: 1.189e-15
# Correlación
correlacion = cor(df_long$precio, df_long$cantidades)
cat("r =", correlacion, "\n")
## r = -0.4275321
cat("R^2 =", correlacion^2, "\n")
## R^2 = 0.1827837
# Elasticidad
precio_prom   = mean(df_long$precio)
cantidad_prom = mean(df_long$cantidades)
elasticidad   = b1 * (precio_prom / cantidad_prom)

cat("Precio promedio:", precio_prom, "\n")
## Precio promedio: 56500
cat("Cantidad promedio:", cantidad_prom, "\n")
## Cantidad promedio: 2.1
cat("Elasticidad:", elasticidad, "\n")
## Elasticidad: -2.676888
if (abs(elasticidad) > 1) {
  cat("Demanda ELÁSTICA\n")
} else if (abs(elasticidad) < 1) {
  cat("Demanda INELÁSTICA\n")
} else {
  cat("Elasticidad UNITARIA\n")
}
## Demanda ELÁSTICA
# Estadística descriptiva
print(summary(df_long$precio))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   43000   49000   56500   56500   64000   70000
print(summary(df_long$cantidades))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0     0.0     1.0     2.1     3.0     6.0
cat("Desv. estándar cantidades:", sd(df_long$cantidades), "\n")
## Desv. estándar cantidades: 2.008446
cat("Desv. estándar precios:", sd(df_long$precio), "\n")
## Desv. estándar precios: 8630.339
tabla_resumen = aggregate(cantidades ~ precio, data = df_long, FUN = mean)
colnames(tabla_resumen) = c("Precio", "Cantidad_promedio_demandada")
print(tabla_resumen)
##    Precio Cantidad_promedio_demandada
## 1   43000                     3.31250
## 2   46000                     3.09375
## 3   49000                     2.90625
## 4   52000                     2.59375
## 5   55000                     2.25000
## 6   58000                     2.15625
## 7   61000                     1.75000
## 8   64000                     1.28125
## 9   67000                     0.96875
## 10  70000                     0.68750
write.csv(tabla_resumen, "tabla_resumen_precio_cantidad.csv", row.names = FALSE)

# Gráfico
png("grafico_demanda_LoL.png", width = 2400, height = 1500, res = 300)
plot(df_long$precio, df_long$cantidades,
     main = "Curva de demanda estimada: Cantidad vs Precio",
     sub = paste0("Q = ", round(b0,2), " + (", round(b1,5), ") * P   |   R² = ",
                  round(correlacion^2, 3)),
     xlab = "Precio (COP)",
     ylab = "Cantidad demandada (unidades al año)",
     pch = 19, col = rgb(0.27, 0.51, 0.71, 0.4))
abline(reg1, col = "darkred", lwd = 2)
dev.off()
## png 
##   2
plot(df_long$precio, df_long$cantidades,
     main = "Curva de demanda estimada: Cantidad vs Precio",
     sub = paste0("Q = ", round(b0,2), " + (", round(b1,5), ") * P   |   R² = ",
                  round(correlacion^2, 3)),
     xlab = "Precio (COP)",
     ylab = "Cantidad demandada (unidades al año)",
     pch = 19, col = rgb(0.27, 0.51, 0.71, 0.4))
abline(reg1, col = "darkred", lwd = 2)

# Estadístico de prueba H0: b1 = 0
-9.949e-05/1.180e-05
## [1] -8.431356
significativo_o_no= lm(cantidades ~ precio + sexo + edad, data = df_long)

pr= summary(significativo_o_no)$coefficients[, 4]
ifelse(pr < 0.05, "Significativo", "No significativo")
##                        (Intercept)                             precio 
##                    "Significativo"                    "Significativo" 
## sexo2026/09/02 11:39:59 p.m. GMT-5 sexo2026/09/02 11:42:14 p.m. GMT-5 
##                    "Significativo"                    "Significativo" 
##  sexo2026/09/02 4:56:55 p.m. GMT-5  sexo2026/09/02 4:59:32 p.m. GMT-5 
##                    "Significativo"                    "Significativo" 
##  sexo2026/09/02 5:06:06 p.m. GMT-5  sexo2026/09/02 5:15:17 p.m. GMT-5 
##                 "No significativo"                    "Significativo" 
##  sexo2026/09/02 5:26:35 p.m. GMT-5  sexo2026/09/02 8:48:13 p.m. GMT-5 
##                    "Significativo"                 "No significativo" 
##  sexo2026/09/03 1:04:37 a.m. GMT-5  sexo2026/09/03 1:35:03 p.m. GMT-5 
##                    "Significativo"                 "No significativo" 
##  sexo2026/09/06 1:26:41 p.m. GMT-5  sexo2026/09/06 1:34:25 p.m. GMT-5 
##                    "Significativo"                    "Significativo" 
## sexo2026/09/06 10:00:01 p.m. GMT-5 sexo2026/09/06 10:06:00 p.m. GMT-5 
##                    "Significativo"                 "No significativo" 
## sexo2026/09/06 10:10:21 p.m. GMT-5 sexo2026/09/06 10:15:32 p.m. GMT-5 
##                    "Significativo"                    "Significativo" 
## sexo2026/09/06 10:20:02 p.m. GMT-5 sexo2026/09/06 10:21:38 p.m. GMT-5 
##                    "Significativo"                    "Significativo" 
## sexo2026/09/06 10:23:41 p.m. GMT-5  sexo2026/09/06 6:41:56 p.m. GMT-5 
##                    "Significativo"                 "No significativo" 
##  sexo2026/09/06 7:02:02 p.m. GMT-5  sexo2026/09/06 7:08:35 p.m. GMT-5 
##                 "No significativo"                    "Significativo" 
##  sexo2026/09/06 7:33:45 p.m. GMT-5  sexo2026/09/06 7:45:13 p.m. GMT-5 
##                    "Significativo"                 "No significativo" 
##  sexo2026/09/06 7:57:22 p.m. GMT-5  sexo2026/09/06 8:51:20 p.m. GMT-5 
##                    "Significativo"                    "Significativo" 
##  sexo2026/09/06 8:55:23 p.m. GMT-5  sexo2026/09/06 9:17:09 p.m. GMT-5 
##                    "Significativo"                    "Significativo" 
##  sexo2026/09/06 9:47:20 p.m. GMT-5  sexo2026/09/06 9:50:33 p.m. GMT-5 
##                    "Significativo"                    "Significativo" 
##  sexo2026/09/06 9:58:16 p.m. GMT-5 
##                    "Significativo"

Intercepto

0.0000000000000002 < 0.05, es significativo.

Precio

0.00000000000000119 < 0.05, es significativo.

Explicación

Los dos números son menores que el 5%, lo que quiere decir que si tienen un efecto en el estudio bastante grande. En este caso el precio del pase de acto sí influye en la cantidad de pases que compra la gente asi como el sexo y la edad.