11 votos

Compara el R-cuadrado de dos modelos diferentes de Random Forest

Estoy utilizando el paquete randomForest en R para desarrollar un modelo de bosque aleatorio para intentar explicar un resultado continuo en un conjunto de datos "amplio" con más predictores que muestras.

En concreto, estoy ajustando un modelo de RF que permite al procedimiento seleccionar entre un conjunto de ~75 variables predictoras que considero importantes.

Estoy probando lo bien que ese modelo predice el resultado real para un conjunto de pruebas reservado, utilizando el enfoque publicado aquí anteriormente a saber,

... o en R:

1 - sum((y-predicted)^2)/sum((y-mean(y))^2)

Pero ahora tengo unas 25 variables predictoras adicionales que puedo añadir. Al utilizar el conjunto de ~100 predictores, el R² es mayor. Quiero probar esto estadísticamente, en otras palabras, cuando se utiliza el conjunto de ~100 predictores, ¿el modelo prueba significativamente mejor en los datos de prueba que el modelo ajustado utilizando ~75 predictores. Es decir, ¿es el R² de la prueba del ajuste del modelo de RF en el conjunto de datos completo significativamente mayor que el R² de la prueba del modelo de RF en el conjunto de datos reducido?

Es importante que lo compruebe, porque se trata de datos piloto, y conseguir esos 25 predictores adicionales fue caro, y necesito saber si debo pagar para medir esos predictores en un estudio de seguimiento más amplio.

Estoy tratando de pensar en algún tipo de enfoque de remuestreo/permutación pero no se me ocurre nada.

8voto

Boris Tsirelson Puntos 191

¡Validación cruzada! Utilice el tren función en caret para adaptarse a sus 2 modelos. Utilice un valor de mtry (el mismo para ambos modelos). Caret devolverá una estimación remuestreada del RMSE y $R^2$ .

Véase la página 3 del viñeta caret (también en el manual de referencia completo )

0 votos

Estoy de acuerdo, excepto por tu omisión de que el OP debería usar R-cuadrado ajustado, ya que es para lo que está diseñado. Los modelos tienen la misma Y pero diferentes conjuntos de predictores, por lo que se necesita R-cuadrado ajustado para penalizar la diferencia en grados de libertad gastados/complejidad del modelo. El otro problema que veo es potencialmente un problema de tamaño de la muestra; OP requeriría un tamaño de muestra MASIVO para tener algún tipo de esperanza real de que esto no es sólo un exceso de ajuste, incluso con CV.

0 votos

@LSC Yo diría que si de mantiene un adicional (que no se utiliza para la selección), podrían utilizar R2 sin ajuste, ya que es sólo RMSE normalizado. Estoy de acuerdo en que necesitarían un conjunto de datos bastante grande para hacerlo.

0 votos

Datos nuevos o antiguos, todo lo demás constante, poner 100 términos en un modelo frente a 25 tendrá un R-cuadrado no ajustado más alto en comparación con el R-cuadrado del modelo de 25 predictores. Esto es fácil de ver cuando se calcula la suma de errores al cuadrado entre los dos (más términos es menor SSE, todo lo demás es igual). Creo que la gente a menudo olvida que un mayor número de términos nunca disminuirá la R-cuadrada, pero si apestan en relación con su valor, pueden disminuir la R-cuadrada ajustada, que es una mejor medida para ver la rentabilidad.

5voto

ESRogs Puntos 1381

Estoy de acuerdo con Zach que la mejor idea es hacer una validación cruzada de ambos modelos y luego comparar el $R^2$ s, por ejemplo, recogiendo los valores de cada pliegue y comparando los vectores resultantes con la prueba de Wilcoxon (emparejada para los pliegues k, no emparejada para el CV aleatorio).

La opción lateral es utilizar toda la selección de características relevantes, lo que le indicaría qué atributos tienen una oportunidad de ser significativamente útiles para la clasificación - por lo tanto, el tiempo de esos atributos caros valen su precio. Se puede hacer, por ejemplo, con una envoltura de RF, Boruta .

0 votos

Para una prueba emparejada, ¿supongo que los 2 modelos se ajustan a los mismos pliegues? De modo que las k filas de la matrx son los pliegues y las dos columnas son el modelo 1 y el modelo 2?

0 votos

@B_Miner Precisamente.

2voto

Eero Puntos 1612

Es posible que quiera pensar en términos de significación práctica más que de significación estadística (o ambos). Con suficientes datos, puedes encontrar cosas significativas desde el punto de vista estadístico que no tendrán un impacto real en tu uso. Recuerdo que una vez analicé un modelo en el que las interacciones de 5 vías eran estadísticamente significativas, pero cuando se compararon las predicciones del modelo que incluía todo hasta las interacciones de 5 vías con las predicciones de un modelo que sólo incluía las interacciones de 2 vías y los efectos principales, la mayor diferencia fue de menos de 1 persona (la respuesta era el número de personas y todos los valores interesantes se alejaban de 0). Así que la complejidad añadida no merecía la pena. Así que mire las diferencias en sus predicciones para ver si las diferencias son suficientes para justificar el coste extra, si no es así, ¿por qué molestarse en buscar la significación estadística? Si las diferencias son lo suficientemente grandes como para justificar el coste si son reales, entonces apoyo las otras sugerencias de utilizar la validación cruzada.

2voto

Chris Charabaruk Puntos 2817

Una opción sería crear un intervalo de confianza para el error cuadrático medio. Utilizaría el error cuadrático medio en lugar de $R^2$ ya que el denominador es el mismo para ambos modelos. El artículo de Dudoit y van der Laan ( artículo y documento de trabajo ) proporciona un teorema general para la construcción de un intervalo de confianza para cualquier estimador de riesgo. Utilizando el ejemplo de los datos del iris, aquí hay un código R que crea un intervalo de confianza del 95% utilizando el método:

library(randomForest)
data(iris)
set.seed(42)

# split the data into training and testing sets
index <- 1:nrow(iris)
trainindex <- sample(index, trunc(length(index)/2))
trainset <- iris[trainindex, ]
testset <- iris[-trainindex, ]

# with species
model1 <- randomForest(Sepal.Length ~ Sepal.Width + Petal.Length +
   Petal.Width + Species, data = trainset)
# without species
model2 <- randomForest(Sepal.Length ~ Sepal.Width + Petal.Length + 
   Petal.Width, data = trainset)

pred1 <- predict(model1, testset[, -1])
pred2 <- predict(model2, testset[, -1])

y <- testset[, 1]
n <- length(y)

# psi is the mean squared prediction error (MSPE) estimate
# sigma2 is the estimate of the variance of the MSPE
psi1 <- mean((y - pred1)^2)
sigma21 <- 1/n * var((y - pred1)^2) 
# 95% CI:
c(psi1 - 1.96 * sqrt(sigma21), psi1, psi1 + 1.96 * sqrt(sigma21))

psi2 <- mean((y - pred2)^2)
sigma22 <- 1/n * var((y - pred2)^2) 
# 95% CI:
c(psi2 - 1.96 * sqrt(sigma22), psi2, psi2 + 1.96 * sqrt(sigma22))

El método también puede ampliarse para que funcione con la validación cruzada (no sólo con la división de muestras, como se muestra arriba).

1voto

mrbcuda Puntos 421

Dado que ya está utilizando randomForest después de la validación cruzada podría emitir el cálculo del ajuste elegido de los valores de importancia del predictor.

> require(randomForest)
> rf.fit = randomForest(Species~.,data=iris,importance=TRUE)
> rf.fit$importance
                  setosa   versicolor   virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 0.036340893  0.021013369 0.032345037          0.030708732         9.444598
Sepal.Width  0.005399468 -0.002131412 0.007499143          0.003577089         2.046650
Petal.Length 0.319872296  0.297426025 0.290278930          0.299795555        42.494972
Petal.Width  0.343995456  0.309455331 0.277644128          0.307843300        45.286720

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X