Comenzamos leyendo el fichero de datos y viendo cómo este está configurado.
portatiles = read.csv("/Users/maralislu/Desktop/objetivo3/portatiles.csv", sep=';')
head(portatiles)
## Nombre Marca SO RAM DiscoDuroGB
## 1 Acer Aspire Go 15 Portátil AG15-42P ACER Windows 11 8 512
## 2 Acer A315-59 ACER FreeDOS 16 512
## 3 Acer Aspire 5 Portátil A515-57 ACER Windows 11 16 1024
## 4 Acer Aspire 3 Portátil A317-54 ACER Windows 11 8 512
## 5 Acer Aspire 3 A315-59 ACER Sin SO 16 1024
## 6 Acer Nitro 16 Portátil gaming AN16-73 ACER Windows 11 16 1024
## ProcesadorCPU NúcleosCPU VelocidadMaxProcesador GPU
## 1 AMD Ryzen 5 6 4,3 AMD Radeon Graphics
## 2 Intel Core i7 10 4,7 Intel Iris X
## 3 Intel Core i5 8 2 Intel UHD Graphics
## 4 Intel Core i5 10 3,6 Intel Iris X
## 5 Intel Core i5 10 4,4 Intel UHD Graphics
## 6 Intel Core i7 16 2,2 NVIDIA GeForce RTX 4050
## NúcleosGPU Pantalla Peso Tactil Web Precio RankingMarca
## 1 NA 15,6 1,78 0 Acer 599 346
## 2 NA 15,6 1,7 0 Mediamarkt 627 346
## 3 NA 15,6 1,76 0 Acer 899 346
## 4 NA 17,3 2,23 0 Acer 799 346
## 5 NA 15,6 1,82 0 PcComponentes 602 346
## 6 NA 16 2,45 0 Acer 1499 346
str(portatiles)
## 'data.frame': 321 obs. of 16 variables:
## $ Nombre : chr "Acer Aspire Go 15 Portátil AG15-42P" "Acer A315-59" "Acer Aspire 5 Portátil A515-57" "Acer Aspire 3 Portátil A317-54" ...
## $ Marca : chr "ACER" "ACER" "ACER" "ACER" ...
## $ SO : chr "Windows 11" "FreeDOS" "Windows 11" "Windows 11" ...
## $ RAM : int 8 16 16 8 16 16 16 16 16 16 ...
## $ DiscoDuroGB : int 512 512 1024 512 1024 1024 1024 1024 512 1024 ...
## $ ProcesadorCPU : chr "AMD Ryzen 5" "Intel Core i7" "Intel Core i5" "Intel Core i5" ...
## $ NúcleosCPU : int 6 10 8 10 10 16 10 NA 12 10 ...
## $ VelocidadMaxProcesador: chr "4,3" "4,7" "2" "3,6" ...
## $ GPU : chr "AMD Radeon Graphics" "Intel Iris X" "Intel UHD Graphics" "Intel Iris X" ...
## $ NúcleosGPU : int NA NA NA NA NA NA NA NA NA NA ...
## $ Pantalla : chr "15,6" "15,6" "15,6" "17,3" ...
## $ Peso : chr "1,78" "1,7" "1,76" "2,23" ...
## $ Tactil : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Web : chr "Acer" "Mediamarkt" "Acer" "Acer" ...
## $ Precio : int 599 627 899 799 602 1499 949 1099 949 1299 ...
## $ RankingMarca : int 346 346 346 346 346 346 346 346 346 346 ...
Vemos que hay variables numéricas que están en formato texto, así que lo modificamos para luego poder utilizarlas en el modelo que haremos. Para ello, si los valores tienen comas como separador decimal, lo sustituiremos por puntos. Además, la variable Táctil será booleana.
portatiles$VelocidadMaxProcesador <- gsub(",", ".", portatiles$VelocidadMaxProcesador)
portatiles$VelocidadMaxProcesador <- as.numeric(portatiles$VelocidadMaxProcesador)
portatiles$Pantalla <- gsub(",", ".", portatiles$Pantalla)
portatiles$Pantalla <- as.numeric(portatiles$Pantalla)
portatiles$Peso <- gsub(",", ".", portatiles$Peso)
portatiles$Peso <- as.numeric(portatiles$Peso)
portatiles$Tactil <- as.logical(portatiles$Tactil)
Como nuestro objetivo comparará entre fabricantes, primero vamos a crear subdataframes para ver cuántos datos tenemos de cada marca.
lista_marcas <- split(portatiles, portatiles$Marca)
datos_Apple <- lista_marcas[["Apple"]] # ranking 1
datos_DELL <- lista_marcas[["DELL"]] # ranking 47
datos_HP <- lista_marcas[["HP"]] # ranking 80
Finalmente nos quedaremos con las marcas de Apple, DELL y HP, posicionadas en el ránking en los puestos número 1, 47 y 80, respectivamente. Estas marcas son las que mayor representación tienen en la base de datos original.
Modelo de regresión lineal
Vamos a utilizar regresión lineal múltiple por ser un método adecuado para analizar el efecto individual de varias variables técnicas sobre el precio de los ordenadores. Este enfoque permite interpretar con claridad cómo influye cada factor en el precio, y comparar estas relaciones entre marcas.
No será necesario normalizar los datos porque queremos interpretar el efecto real (euros por GB, euros por kg, etc.). Asimismo, cabe destacar que los datos no han sido divididos en un conjunto de entrenamiento y otro de testeo por el bajo número de ordenadores disponibles para cada marca.
Para determinar qué variables utilizaremos en el modelo, vamos a sacar el resumen de la base de datos original.
summary(portatiles)
## Nombre Marca SO RAM
## Length:321 Length:321 Length:321 Min. : 4.00
## Class :character Class :character Class :character 1st Qu.: 16.00
## Mode :character Mode :character Mode :character Median : 16.00
## Mean : 23.86
## 3rd Qu.: 32.00
## Max. :128.00
##
## DiscoDuroGB ProcesadorCPU NúcleosCPU VelocidadMaxProcesador
## Min. : 128.0 Length:321 Min. : 1.0 Min. :1.000
## 1st Qu.: 512.0 Class :character 1st Qu.:10.0 1st Qu.:3.900
## Median : 512.0 Mode :character Median :10.0 Median :4.500
## Mean : 972.2 Mean :11.6 Mean :4.379
## 3rd Qu.:1024.0 3rd Qu.:14.0 3rd Qu.:4.900
## Max. :8192.0 Max. :24.0 Max. :5.800
## NA's :17
## GPU NúcleosGPU Pantalla Peso
## Length:321 Min. : 8.00 Min. :12.40 Min. :0.895
## Class :character 1st Qu.:10.00 1st Qu.:14.00 1st Qu.:1.550
## Mode :character Median :10.00 Median :15.60 Median :1.590
## Mean :16.06 Mean :15.03 Mean :1.725
## 3rd Qu.:20.00 3rd Qu.:15.60 3rd Qu.:1.810
## Max. :40.00 Max. :18.00 Max. :3.600
## NA's :212
## Tactil Web Precio RankingMarca
## Mode :logical Length:321 Min. : 202 Min. : 1
## FALSE:293 Class :character 1st Qu.: 799 1st Qu.: 1
## TRUE :28 Mode :character Median :1591 Median : 47
## Mean :1873 Mean :100
## 3rd Qu.:2344 3rd Qu.:136
## Max. :8574 Max. :526
## NA's :29
En este caso, escogemos las variables numéricas RAM, DiscoDuroGB, NúcleosCPU, VelocidadMaxProcesador, Pantalla y Peso, y evaluaremos el modelo inicialmente con estas variables.
Por tanto, nuestra ecuación será:
Precio = β0 + β1RAM + β2DiscoDuroGB + β3NúcleosCPU + β4VelocidadMaxProcesador + β5Pantalla + β6Peso
Habrá que tener en cuenta que la variable Peso es un conjunto de varias, ya que un portátil pesa más por el conjunto de todos sus componentes.
Este modelo asume que cada variable afecta al precio de forma independiente de las demás. Por ahora no añadiremos interacciones porque podría aumentar el riesgo de sobreajuste, especialmente al no tener muchas observaciones. Lo que podría dificultar la interpretación del modelo.
DATOS APPLE
modelo_apple <- lm(Precio ~ RAM + DiscoDuroGB + NúcleosCPU + VelocidadMaxProcesador + Pantalla + Peso, data = datos_Apple)
summary(modelo_apple)
##
## Call:
## lm(formula = Precio ~ RAM + DiscoDuroGB + NúcleosCPU + VelocidadMaxProcesador +
## Pantalla + Peso, data = datos_Apple)
##
## Residuals:
## Min 1Q Median 3Q Max
## -556.23 -167.99 2.13 146.77 614.05
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.684e+03 1.316e+03 -1.279 0.2046
## RAM 2.193e+01 1.604e+00 13.666 < 2e-16 ***
## DiscoDuroGB 4.394e-01 1.809e-02 24.285 < 2e-16 ***
## NúcleosCPU 1.711e+02 3.086e+01 5.545 3.58e-07 ***
## VelocidadMaxProcesador 3.530e+02 2.621e+02 1.347 0.1818
## Pantalla -1.459e+02 7.240e+01 -2.016 0.0471 *
## Peso 1.289e+03 3.027e+02 4.257 5.53e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 252.3 on 81 degrees of freedom
## Multiple R-squared: 0.9773, Adjusted R-squared: 0.9756
## F-statistic: 581.1 on 6 and 81 DF, p-value: < 2.2e-16
En este caso, todas la variables son significativas excepto VelocidadMaxProcesador y Pantalla, que como está en el umbral, vamos a ver las correlaciones entre las variables seleccionadas para determinar qué hacemos con esa variable.
cor(datos_Apple[, c("RAM", "DiscoDuroGB", "NúcleosCPU", "VelocidadMaxProcesador", "Pantalla", "Peso")], use = "complete.obs")
## RAM DiscoDuroGB NúcleosCPU
## RAM 1.00000000 0.44765659 0.69718711
## DiscoDuroGB 0.44765659 1.00000000 0.52222450
## NúcleosCPU 0.69718711 0.52222450 1.00000000
## VelocidadMaxProcesador 0.57439228 0.46128340 0.89641674
## Pantalla -0.08869287 -0.15885778 -0.02820722
## Peso 0.18860865 0.07255581 0.44237283
## VelocidadMaxProcesador Pantalla Peso
## RAM 0.57439228 -0.08869287 0.18860865
## DiscoDuroGB 0.46128340 -0.15885778 0.07255581
## NúcleosCPU 0.89641674 -0.02820722 0.44237283
## VelocidadMaxProcesador 1.00000000 -0.08740651 0.47573133
## Pantalla -0.08740651 1.00000000 0.68604316
## Peso 0.47573133 0.68604316 1.00000000
Como vemos, Pantalla está altamente correlacionada (0.686) con Peso, por lo que vamos a eliminar tanto esa variable como VelocidadMaxProcesador.
modelo2_apple <- lm(Precio ~ RAM + DiscoDuroGB + NúcleosCPU + Peso, data = datos_Apple)
summary(modelo2_apple)
##
## Call:
## lm(formula = Precio ~ RAM + DiscoDuroGB + NúcleosCPU + Peso,
## data = datos_Apple)
##
## Residuals:
## Min 1Q Median 3Q Max
## -575.15 -155.16 -40.36 111.61 829.94
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.296e+03 2.444e+02 -9.395 1.06e-14 ***
## RAM 2.131e+01 1.674e+00 12.730 < 2e-16 ***
## DiscoDuroGB 4.413e-01 1.903e-02 23.190 < 2e-16 ***
## NúcleosCPU 2.270e+02 2.015e+01 11.267 < 2e-16 ***
## Peso 8.659e+02 1.775e+02 4.879 5.08e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 265.5 on 83 degrees of freedom
## Multiple R-squared: 0.9742, Adjusted R-squared: 0.973
## F-statistic: 784.4 on 4 and 83 DF, p-value: < 2.2e-16
Aunque el modelo más complejo ha alcanzado un R² ligeramente superior (0.9773 vs 0.9742), las diferencias son mínimas y se ha optado por usar el modelo más sencillo, que también mantiene un R² ajustado alto. De esta froma, minimizamos le riesgo de sobreajuste y simplificamos la interpretabilidad.
Vamos a evaluar el modelo con diferentes gráficos.
# Gráfico de residuos vs valores ajustados
plot(modelo2_apple$fitted.values,
resid(modelo2_apple),
xlab = "Valores ajustados",
ylab = "Residuos",
main = "Residuos vs Valores ajustados")
abline(h = 0, col = "red")
Gráfico de residuos vs valores ajustados: El gráfico muestra un patrón de dispersión que tiende a ensancharse en los extremos, especialmente en los valores altos de precio. Esto podría deberse a que en el rango de precios elevados (superiores a 4000 euros), el número de observaciones es muy limitado, como se aprecia en el histograma de precios de Apple, donde la mayor densidad de datos se encuentra entre 1500 y 4000 euros, disminuyendo progresivamente a medida que el precio aumenta.
hist(datos_Apple$Precio, main = "Distribución de precios Apple", xlab = "Precio", col = "skyblue", breaks = 15)
# Histograma de residuos
hist(resid(modelo2_apple), main = "Histograma de residuos", xlab = "Residuos", col = "lightblue", breaks = 10)
Histograma de residuos: Los residuos siguen una distribución aproximadamente simétrica. Hay una leve asimetría positiva, pero no crítica. Además, confirma que los errores del modelo están centrados en cero.
# QQ-plot para verificar normalidad
qqnorm(resid(modelo2_apple))
qqline(resid(modelo2_apple), col = "red")
Gráfico Q-Q: La mayoría de los puntos siguen bastante bien la línea teórica de normalidad. Se observan ligeros desvíos en los extremos, lo que indica posibles outliers leves, pero el ajuste global es aceptable.
DATOS DELL
Continuaremos con los datos de Dell siguiendo la misma ecuación que hemos utilizado finalmente con Apple, aunque observaremos las correlaciones entre las variables inicialmente seleccionadas por si hubiese mucha disconformidad con los datos de Apple.
Precio = β0 + β1RAM + β2DiscoDuroGB + β3NúcleosCPU + β4Peso
cor(datos_DELL[, c("RAM", "DiscoDuroGB", "NúcleosCPU", "VelocidadMaxProcesador", "Pantalla", "Peso")], use = "complete.obs")
## RAM DiscoDuroGB NúcleosCPU
## RAM 1.00000000 0.17521008 0.32199930
## DiscoDuroGB 0.17521008 1.00000000 0.01889366
## NúcleosCPU 0.32199930 0.01889366 1.00000000
## VelocidadMaxProcesador 0.18914970 0.04884229 0.64792828
## Pantalla -0.32531888 0.05003930 0.08919426
## Peso -0.06114634 0.04319127 0.54918182
## VelocidadMaxProcesador Pantalla Peso
## RAM 0.18914970 -0.32531888 -0.06114634
## DiscoDuroGB 0.04884229 0.05003930 0.04319127
## NúcleosCPU 0.64792828 0.08919426 0.54918182
## VelocidadMaxProcesador 1.00000000 0.06730540 0.32735865
## Pantalla 0.06730540 1.00000000 0.77910987
## Peso 0.32735865 0.77910987 1.00000000
modelo_dell <- lm(Precio ~ RAM + DiscoDuroGB + NúcleosCPU + Peso, data = datos_DELL)
summary(modelo_dell)
##
## Call:
## lm(formula = Precio ~ RAM + DiscoDuroGB + NúcleosCPU + Peso,
## data = datos_DELL)
##
## Residuals:
## Min 1Q Median 3Q Max
## -429.06 -58.41 -5.29 51.60 722.54
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -290.86921 234.33918 -1.241 0.2206
## RAM 12.63500 1.78206 7.090 5.35e-09 ***
## DiscoDuroGB 0.21670 0.04304 5.035 7.15e-06 ***
## NúcleosCPU 157.74243 11.04110 14.287 < 2e-16 ***
## Peso -345.68796 144.25011 -2.396 0.0205 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 175 on 48 degrees of freedom
## Multiple R-squared: 0.9147, Adjusted R-squared: 0.9076
## F-statistic: 128.7 on 4 and 48 DF, p-value: < 2.2e-16
En este caso, los resultados muestran un R² ajustado de 0,9076, lo que significa que este modelo explica aproximadamente el 90,8 % de la variabilidad observada en los precios, indicando un ajuste muy bueno. El estadístico F del modelo es 128,7 con un p-valor < 2.2e-16, confirmando que, en conjunto, los predictores seleccionados contribuyen significativamente a explicar la variable dependiente.
Analizando los coeficientes beta, se observa que todas las variables son estadísticamente significativas (p < 0,05). En concreto, la RAM, el tamaño del disco duro y el número de núcleos de CPU tienen un impacto positivo sobre el precio: a medida que aumentan, el precio del ordenador también se incrementa. Curiosamente, el peso tiene un coeficiente negativo, lo que sugiere que, en Dell, los modelos más pesados tienden a ser menos costosos, posiblemente porque los equipos más ligeros incorporan componentes premium o están orientados a segmentos de mayor precio.
# Gráfico de residuos vs valores ajustados
plot(modelo_dell$fitted.values,
resid(modelo_dell),
xlab = "Valores ajustados",
ylab = "Residuos",
main = "Residuos vs Valores ajustados")
abline(h = 0, col = "red")
Gráfico de residuos vs valores ajustados: La nube de puntos está centrada en torno a 0, lo cual es bueno. Sin embargo, se ve una mayor dispersión en valores bajos, especialmente los menores a 1500 €. Esto sugiere una leve heterocedasticidad, donde el modelo es menos preciso en portátiles más baratos.
# Histograma de residuos
hist(resid(modelo_dell),
main = "Histograma de residuos",
xlab = "Residuos",
col = "lightblue", breaks = 10)
Histograma de residuos: Se muestra una distribución aproximadamente simétrica centrada en torno a cero, lo que es un buen indicio para cumplir con el supuesto de normalidad de los errores en regresión lineal. Sin embargo, se observa que los residuos negativos son algo más extendidos que los positivos, lo que sugiere una ligera asimetría no demasiado marcada.
# QQ-plot para verificar normalidad
qqnorm(resid(modelo_dell))
qqline(resid(modelo_dell), col = "red")
Gráfico Q-Q: Los puntos siguen bien la línea teórica en el centro, aunque hay desviaciones en los extremos, tanto por debajo como por arriba.
DATOS HP
Al igual que antes, vamos a continuar con la misma ecuación que las de las dos marcas anteriores
Precio = β0 + β1RAM + β2DiscoDuroGB + β3NúcleosCPU + β4Peso
cor(datos_HP[, c("RAM", "DiscoDuroGB", "NúcleosCPU", "VelocidadMaxProcesador", "Pantalla", "Peso")], use = "complete.obs")
## RAM DiscoDuroGB NúcleosCPU
## RAM 1.00000000 0.5255774 0.4141795
## DiscoDuroGB 0.52557735 1.0000000 0.1678346
## NúcleosCPU 0.41417946 0.1678346 1.0000000
## VelocidadMaxProcesador -0.08742684 0.1737001 0.2856287
## Pantalla -0.34286376 -0.2101011 -0.3912238
## Peso -0.24307379 -0.2098648 -0.1071546
## VelocidadMaxProcesador Pantalla Peso
## RAM -0.08742684 -0.3428638 -0.2430738
## DiscoDuroGB 0.17370005 -0.2101011 -0.2098648
## NúcleosCPU 0.28562866 -0.3912238 -0.1071546
## VelocidadMaxProcesador 1.00000000 0.1768520 0.1693666
## Pantalla 0.17685202 1.0000000 0.8207514
## Peso 0.16936656 0.8207514 1.0000000
En este caso, la correlación entre Peso y Pantalla es todavía mayor si la comparamos con las otras marcas.
modelo_hp <- lm(Precio ~ RAM + DiscoDuroGB + NúcleosCPU + Peso, data = datos_HP)
summary(modelo_hp)
##
## Call:
## lm(formula = Precio ~ RAM + DiscoDuroGB + NúcleosCPU + Peso,
## data = datos_HP)
##
## Residuals:
## Min 1Q Median 3Q Max
## -200.41 -116.95 -42.72 81.35 349.51
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -47.363519 504.656617 -0.094 0.925793
## RAM 29.823492 7.005826 4.257 0.000161 ***
## DiscoDuroGB -0.006756 0.101627 -0.066 0.947396
## NúcleosCPU 26.059896 10.281189 2.535 0.016179 *
## Peso 7.837645 296.908516 0.026 0.979099
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 149.6 on 33 degrees of freedom
## Multiple R-squared: 0.6022, Adjusted R-squared: 0.554
## F-statistic: 12.49 on 4 and 33 DF, p-value: 2.708e-06
En esta situación, los resultados muestran un R² ajustado de 0,554, y aunque se han explorado diversas configuraciones de modelos (incluyendo transformaciones logarítmicas o interacciones), el coeficiente de determinación R² no ha superado en nigún momento el 65%. Esto refleja que, en el caso de los ordenadores HP, las variables técnicas disponibles explican una proporción limitada del precio final, dejando una proporción importante sin justificar. Además, una de las principales limitaciones encontradas en el análisis de esta marca es la reducida cantidad de datos disponibles ya que el conjunto incluye únicamente 38 observaciones.
# Gráfico de residuos vs valores ajustados
plot(modelo_hp$fitted.values,
resid(modelo_hp),
xlab = "Valores ajustados",
ylab = "Residuos",
main = "Residuos vs Valores ajustados")
abline(h = 0, col = "red")
Gráfico de residuos vs valores ajustados: En este gráfico vemos que los residuos se distribuyen de forma bastante concentrada alrededor de los valores ajustados medios, mientras que en los extremos hay pocos puntos y una mayor dispersión. Esto sugiere que el modelo tiene más dificultad para predecir correctamente los precios más bajos o más altos, posiblemente porque hay pocos datos en esas franjas para entrenar bien el ajuste.
# Histograma de residuos
hist(resid(modelo_hp),
main = "Histograma de residuos",
xlab = "Residuos",
col = "lightblue", breaks = 10)
Histograma de residuos: Se muestra que la mayoría de los residuos están agrupados cerca de cero, lo que indica que para muchos casos que el modelo predice razonablemente bien. Sin embargo, hay una cola más larga hacia valores positivos, lo que indica que en algunos casos el modelo subestima el precio real.
# QQ-plot para verificar normalidad
qqnorm(resid(modelo_hp))
qqline(resid(modelo_hp), col = "red")
Gráfico Q-Q: Los puntos de la parte central siguen bastante bien la línea recta, lo cual indica que en general los residuos cumplen la normalidad. Sin embargo, los puntos se separan de la línea en los extremos.
CONCLUSIONES
Precio = β0 + β1RAM + β2DiscoDuroGB + β3NúcleosCPU + β4Peso
| VARIABLES | APPLE | DELL | HP |
|---|---|---|---|
| RAM | 21,31 | 12,64 | 29,82 |
| DiscoDuroGB | 0,44 | 0,22 | -0,006 |
| NúcleosCPU | 227 | 157,74 | 26,06 |
| Peso | 865,9 | -345,69 | 7,84 |
Tras el análisis comparativo de las estrategias de precios por fabricante, considerando el impacto de variables técnicas como RAM, disco duro, número de núcleos de CPU y peso, se han identificado patrones diferenciadores relevantes entre Apple, Dell y HP.
En primer lugar, Apple muestra una relación muy clara entre las características técnicas y el precio, con un modelo que explica aproximadamente el 97,4 % de la variabilidad (R² ajustado). Las variables con mayor impacto son el número de núcleos de CPU y la memoria RAM, seguidas por el peso, que tiene un coeficiente positivo, indicando que los modelos más pesados tienden a ser más caros, posiblemente porque incorporarán componentes de gama alta. Este ajuste tan preciso sugiere que Apple aplica una estrategia de precios estrechamente alineada con las mejoras técnicas.
Por otro lado, Dell también presenta un modelo sólido, con un R² ajustado de 90,8 %, pero destaca un comportamiento interesante: el peso tiene un coeficiente negativo, lo que sugiere que los portátiles más ligeros son más caros. Esto podría deberse a que Dell posiciona sus modelos premium en el segmento ultraligero, donde los materiales de calidad elevan los precios.
En contraste, HP muestra una situación muy diferente. El modelo obtenido solo logra explicar cerca del 55,4 % de la variabilidad, revelando que las variables técnicas analizadas tienen un impacto limitado en los precios finales. Esto puede deberse a una estrategia de precios más heterogénea, donde factores como diseño, marketing, acuerdos comerciales o segmentación del mercado (profesional, educativo, consumo) juegan un papel crucial no capturado por las variables técnicas analizadas. También influye la menor cantidad de datos disponibles, lo que limita la robustez del modelo.
En resumen, mientras que Apple y Dell reflejan estrategias de precios bastante predecibles y alineadas con mejoras técnicas, HP muestra una dinámica más compleja que requeriría la inclusión de variables adicionales para ser correctamente modelada. Estos resultados no solo ayudan a entender las diferencias de mercado entre fabricantes, sino que también abren la puerta a estudios futuros donde se incluyan factores cualitativos y comerciales que podrían explicar mejor las variaciones en el precio final.