La regresión lineal no se ajusta bien

9

Hago una regresión lineal usando la función R lm:

x = log(errors)
plot(x,y)
lm.result = lm(formula = y ~ x)
abline(lm.result, col="blue") # showing the "fit" in blue

ingrese la descripción de la imagen aquí

Pero no encaja bien. Lamentablemente no puedo entender el manual.

¿Alguien puede señalarme en la dirección correcta para encajar esto mejor?

Al ajustar quiero decir que quiero minimizar el error cuadrático medio (RMSE).


Editar : He publicado una pregunta relacionada (es el mismo problema) aquí: ¿Puedo disminuir aún más el RMSE en función de esta función?

y los datos en bruto aquí:

http://tny.cz/c320180d

excepto que en ese enlace x es lo que se llama errores en la página actual aquí, y hay menos muestras (1000 vs 3000 en el diagrama de la página actual). Quería simplificar las cosas en la otra pregunta.

Timothée HENRY
fuente
44
R lm funciona como se esperaba, el problema está en sus datos, es decir, la relación lineal no es apropiada en este caso.
mpiktas
2
¿Podría dibujar qué línea cree que debería obtener y por qué cree que su línea tiene un MSE más pequeño? Noto que su y se encuentra entre 0 y 1, por lo que parece que la regresión lineal sería bastante inadecuada para estos datos. ¿Cuáles son los valores?
Glen_b -Reinstale a Mónica el
2
Si los valores de y son probabilidades, no desea la regresión de OLS en absoluto.
Peter Flom
3
(lo siento, podría publicar esto antes) Lo que te parece "un mejor ajuste" a continuación es (aproximadamente) minimizar las sumas de cuadrados de distancias ortogonales, no las distancias verticales 'tu intuición está equivocada. ¡Puede verificar el MSE aproximado con bastante facilidad! Si los valores de y son probabilidades, sería mejor que te sirva algún modelo que no esté fuera del rango de 0 a 1.
Glen_b -Reinstate Monica
2
Podría ser que esta regresión sufra la presencia de algunos valores atípicos. Podría ser un caso de regresión robusta. en.wikipedia.org/wiki/Robust_regression
Yves Daoust

Respuestas:

18

Una de las soluciones más simples reconoce que los cambios entre las probabilidades que son pequeñas (como 0.1) o cuyos complementos son pequeños (como 0.9) son generalmente más significativas y merecen más peso que los cambios entre las probabilidades medianas (como 0.5).

Por ejemplo, un cambio de 0.1 a 0.2 (a) duplica la probabilidad mientras que (b) cambia la probabilidad complementaria solo en 1/9 (bajando de 1-0.1 = 0.9 a 1-0.2 a 0.8), mientras que un cambio de 0.5 a 0.6 (a) aumenta la probabilidad solo en un 20% mientras que (b) disminuye la probabilidad complementaria solo en un 20%. En muchas aplicaciones, el primer cambio se considera, o al menos debería ser, casi el doble que el segundo.

En cualquier situación en la que sería igualmente significativo usar una probabilidad (de que algo ocurra) o su complemento (es decir, la probabilidad de que algo no ocurra), debemos respetar esta simetría.

Estas dos ideas, de respetar la simetría entre las probabilidades y sus complementos y de expresar los cambios relativamente en lugar de absolutamente, sugieren que al comparar dos probabilidades y deberíamos estar rastreando sus proporciones y las proporciones de sus complementos . Al rastrear proporciones es más sencillo usar logaritmos, que convierten las proporciones en diferencias. Ergo, una buena manera de expresar una probabilidad para este propósito es usar que se conoce como log odds o logitp1pppp/p(1p)/(1p)p

z=logplog(1p),
de . Las probabilidades de registro ajustadas siempre se pueden volver a convertir en probabilidades invirtiendo el logit; La última línea del código a continuación muestra cómo se hace esto.pz
p=exp(z)/(1+exp(z)).

Este razonamiento es bastante general: conduce a un buen procedimiento inicial predeterminado para explorar cualquier conjunto de datos que impliquen probabilidades. (Hay mejores métodos disponibles, como la regresión de Poisson, cuando las probabilidades se basan en la observación de las proporciones de "éxitos" a números de "ensayos", porque las probabilidades basadas en más ensayos se han medido de manera más confiable. Eso no parece ser el en este caso, donde las probabilidades se basan en información obtenida. Se podría aproximar el enfoque de regresión de Poisson utilizando mínimos cuadrados ponderados en el siguiente ejemplo para permitir datos que sean más o menos confiables).

Veamos un ejemplo.

Cifras

El diagrama de dispersión a la izquierda muestra un conjunto de datos (similar al de la pregunta) trazado en términos de probabilidades de registro. La línea roja es su ajuste de mínimos cuadrados ordinarios. Tiene un , lo que indica mucha dispersión y una fuerte "regresión a la media": la línea de regresión tiene una pendiente menor que el eje mayor de esta nube de puntos elíptica. Este es un entorno familiar; Es fácil de interpretar y analizar utilizando la función o el equivalente.R2Rlm

El diagrama de dispersión de la derecha expresa los datos en términos de probabilidades, tal como se registraron originalmente. Se traza el mismo ajuste: ahora parece curvo debido a la forma no lineal en que las probabilidades de registro se convierten en probabilidades.

En el sentido del error cuadrático medio en términos de probabilidades logarítmicas, esta curva es la mejor opción.

Por cierto, la forma aproximadamente elíptica de la nube a la izquierda y la forma en que rastrea la línea de mínimos cuadrados sugiere que el modelo de regresión de mínimos cuadrados es razonable: los datos pueden describirse adecuadamente mediante una relación lineal, siempre que se usen las probabilidades de registro. y la variación vertical alrededor de la línea es aproximadamente del mismo tamaño, independientemente de la ubicación horizontal (homocedasticidad). (Hay algunos valores inusualmente bajos en el medio que podrían merecer un análisis más detallado). Evalúe esto con más detalle siguiendo el código a continuación con el comando plot(fit)para ver algunos diagnósticos estándar. Esto por sí solo es una razón importante para utilizar las probabilidades de registro para analizar estos datos en lugar de las probabilidades.


#
# Read the data from a table of (X,Y) = (X, probability) pairs.
#
x <- read.table("F:/temp/data.csv", sep=",", col.names=c("X", "Y"))
#
# Define functions to convert between probabilities `p` and log odds `z`.
# (When some probabilities actually equal 0 or 1, a tiny adjustment--given by a positive
# value of `e`--needs to be applied to avoid infinite log odds.)
#
logit <- function(p, e=0) {x <- (p-1/2)*(1-e) + 1/2; log(x) - log(1-x)}
logistic <- function(z, e=0) {y <- exp(z)/(1 + exp(z)); (y-1/2)/(1-e) + 1/2}
#
# Fit the log odds using least squares.
#
b <- coef(fit <- lm(logit(x$Y) ~ x$X))
#
# Plot the results in two ways.
#
par(mfrow=c(1,2))
plot(x$X, logit(x$Y), cex=0.5, col="Gray",
     main="Least Squares Fit", xlab="X", ylab="Log odds")
abline(b, col="Red", lwd=2)

plot(x$X, x$Y, cex=0.5, col="Gray",
     main="LS Fit Re-expressed", xlab="X", ylab="Probability")
curve(logistic(b[1] + b[2]*x), col="Red", lwd=2, add=TRUE)
whuber
fuente
Muchas gracias por la respuesta. Necesitaré algo de tiempo para intentarlo.
Timothée HENRY
Me encuentro con un error al intentar su código con mis datos, al intentar ajustar las probabilidades de registro: "Error en lm.fit (x, y, offset = offset, singular.ok = singular.ok, ...): NA / NaN / Inf en llamada a función extranjera (arg 4) ".
Timothée HENRY
Lea los comentarios en el código: explican cuál es el problema y qué hacer al respecto.
whuber
6

Dado el sesgo en los datos con x, lo primero obvio es usar una regresión logística ( enlace wiki ). Así que estoy con whuber en esto. Voy a decir esoxpor sí solo mostrará una gran importancia pero no explicará la mayor parte de la desviación (el equivalente de la suma total de cuadrados en un MCO). Entonces uno podría sugerir que hay otra covariable aparte dex que ayuda al poder explicativo (por ejemplo, las personas que hacen la clasificación o el método utilizado), su ysin embargo, los datos ya son [0,1]: ¿sabe si representan probabilidades o relaciones de ocurrencia? Si es así, debe intentar una regresión logística utilizando su no transformadoy (antes de que sean razones / probabilidades).

La observación de Peter Flom solo tiene sentido si su y no es una probabilidad. Consultar plot(density(y));rug(y)en diferentes cubos dexy vea si ve una distribución Beta cambiante o simplemente se ejecuta betareg. Tenga en cuenta que la distribución beta también es una distribución familiar exponencial y, por lo tanto, debería ser posible modelarla glmen R.

Para darle una idea de lo que quise decir con regresión logística:

# the 'real' relationship where y is interpreted as the probability of success
y = runif(400)
x = -2*(log(y/(1-y)) - 2) + rnorm(400,sd=2) 
glm.logit=glm(y~x,family=binomial); summary(glm.logit) 
plot(y ~ x); require(faraway); grid()
points(x,ilogit(coef(glm.logit) %*% rbind(1.0,x)),col="red")
tt=runif(400)  # an example of your untransformed regression
newy = ifelse(tt < y, 1, 0)
glm.logit=glm(newy~x,family=binomial); summary(glm.logit) 

# if there is not a good match in your tail probabilities try different link function or oversampling with correction (will be worse here, but perhaps not in your data)
glm.probit=glm(y~x,family=binomial(link=probit)); summary(glm.probit)
glm.cloglog=glm(y~x,family=binomial(link=cloglog)); summary(glm.cloglog)

Una regresión logística donde el modelo verdadero es $ log (\ frac {p} {1-p}) = 2-0.5x

EDITAR: después de leer los comentarios:

Dado que "los valores de y son probabilidades de pertenecer a una clase determinada, obtenida del promedio de las clasificaciones hechas manualmente por personas", recomiendo hacer una regresión logística en sus datos base. Aquí hay un ejemplo:

Suponga que está viendo la probabilidad de que alguien acepte una propuesta (y=1 de acuerdo, y=0 en desacuerdo) dado un incentivo xentre 0 y 10 (podría transformarse logarítmicamente, por ejemplo, remuneración). Hay dos personas que proponen la oferta a los candidatos ("Jill y Jack"). El modelo real es que los candidatos tienen una tasa de aceptación base y eso aumenta a medida que aumenta el incentivo. Pero también depende de quién está proponiendo la oferta (en este caso, decimos que Jill tiene una mejor oportunidad que Jack). Suponga que combinados solicitan 1000 candidatos y recopilan sus datos de aceptación (1) o rechazo (0).

require(faraway)
people = c("Jill","Jack")
proposer = sample(people,1000,replace=T)
incentive = runif(1000, min = 0, max =10)
noise = rnorm(1000,sd=2)
# base probability of agreeing is about 12% (ilogit(-2))
agrees = ilogit(-2 + 1*incentive + ifelse(proposer == "Jill", 0 , -0.75) + noise) 
tt = runif(1000)
observedAgrees = ifelse(tt < agrees,1,0)
glm.logit=glm(observedAgrees~incentive+proposer,family=binomial); summary(glm.logit) 

En el resumen, puede ver que el modelo se ajusta bastante bien. La desviación esχn32 (estándar de χ2 es 2.df) Que encaja y supera a un modelo con una probabilidad fija (la diferencia en desviaciones es de varios cientos conχ22) Es un poco más difícil de dibujar dado que hay dos covariables aquí, pero se entiende la idea.

xs = coef(glm.logit) %*% rbind(1,incentive,as.factor(proposer))
ys = as.vector(unlist(ilogit(xs)))
plot(ys~ incentive, type="n"); require(faraway); grid()
points(incentive[proposer == "Jill"],ys[proposer == "Jill"],col="red")
points(incentive[proposer == "Jack"],ys[proposer == "Jack"],col="blue")

Jill en Red Jack en azul

Como puede ver, a Jill le resulta más fácil obtener una buena tasa de éxito que Jack, pero eso desaparece a medida que aumenta el incentivo.

Básicamente, debe aplicar este tipo de modelo a sus datos originales. Si su salida es binaria, mantenga el 1/0 si es multinomial, necesita una regresión logística multinomial. Si cree que la fuente adicional de variación no es el recopilador de datos, agregue otro factor (o variable continua), lo que considere que tiene sentido para sus datos. Los datos vienen primero, segundo y tercero, solo entonces entra en juego el modelo.

Hans Roggeman
fuente
Un comentario del OP: "Los valores de y son probabilidades de pertenecer a una clase determinada, obtenida del promedio de las clasificaciones hechas manualmente por personas", sugiere que la regresión logística sería inapropiada para estos datos, aunque podría ser una gran solución para datos sin procesar (como se sugiere en su primer párrafo), dependiendo de cuáles son las "clasificaciones" y cómo ocurrió el "promedio". Cuando se aplica a los datos que se muestran en la pregunta, glmproduce una línea no curva relativamente plana que se parece notablemente a la línea que se muestra en la pregunta.
whuber
Gracias. Y sí, y es una probabilidad. También publiqué los datos en bruto en una pregunta relacionada: stats.stackexchange.com/questions/83576/… , aunque llamé x a lo que llamé log (x) en la otra pregunta ...
Timothée HENRY
Desearía haberlo sabido antes de adquirir una muestra de tu imagen, ¡LOL!
whuber
5

El modelo de regresión lineal no es adecuado para los datos. Uno podría esperar obtener algo como lo siguiente de la regresión:

ingrese la descripción de la imagen aquí

pero al darse cuenta de lo que hace OLS, es obvio que esto no es lo que obtendrá. Una interpretación gráfica de los mínimos cuadrados ordinarios es que minimiza la distancia vertical al cuadrado entre la línea (hiperplano) y sus datos. Obviamente, la línea púrpura que he superpuesto tiene algunos residuos enormes dex(7,4.5) y nuevamente en el otro lado de 3. Es por eso que la línea azul se ajusta mejor que la púrpura.

pkofod
fuente
@pkofod Sí, ya veo. Así que eliminé mi comentario (sabía que sabías que era cuadrado; pero otros lectores podrían no hacerlo).
Peter Flom
1
La regresión censurada es diferente de la regresión con una variable dependiente que se limita a un rango fijo conocido. Estos datos no están censurados y la regresión censurada no hará nada diferente con ellos que la regresión ordinaria.
whuber
Si, mi mal. Borrado esa parte.
pkofod
4

Como Y está limitado por 0 y 1, la regresión de mínimos cuadrados ordinarios no es adecuada. Puedes probar la regresión beta. En Restá el betaregpaquete.

Intenta algo como esto

install.packages("betareg")
library(betareg)
betamod1 <- betareg(y~x, data = DATASETNAME)

más información

EDITAR: si desea una cuenta completa de la regresión beta, sus ventajas y desventajas, consulte Un mejor exprimidor de limón: regresión de máxima probabilidad con variables dependientes distribuidas beta por Smithson y Verkuilen

Peter Flom
fuente
44
¿Qué modelo está betaregimplementando realmente? ¿Cuáles son sus supuestos y por qué es razonable suponer que se aplican a estos datos?
whuber
2
@whuber ¡Es una buena pregunta! El modelo se define en las páginas 3 y 4 de esta viñeta . Se basa en una densidad beta reparameterized en términos de parámetros medios y de precisión (los cuales se pueden modelar, cada uno con su propia función de enlace), y un conjunto de funciones de enlace iguales a las utilizadas para los modelos binomiales (y uno más). ML lo instala y funciona de manera muy similar a un GLM.
Glen_b: reinstala a Mónica el
2
@whuber Los modelos beta condicionales son comunes para datos de composición y otras proporciones o probabilidades de tipo continuo. No sé si los supuestos para tales modelos son adecuados para estos datos (no sé cuáles son los datos, lo que sería mi primera preocupación antes de sugerir un modelo yo mismo), pero incluso solo de la trama, imagino que encajarían tan bien como otros modelos sugeridos aquí. Hay una serie de modelos en las respuestas aquí que no parecen estar mejor justificados que la sugerencia de Peter, algunos con supuestos (no siempre mencionados) que parecen ser más difíciles de justificar.
Glen_b -Reinstale a Mónica el
1
Gracias, @Glen_b. No cuestiono la sugerencia de Peter, solo trato de entenderla, porque no he usado la regresión beta antes, e imagino que muchos futuros lectores estarían en la misma situación. (¡Estoy lo suficientemente familiarizado con los otros modelos mencionados en este hilo para comprender sus suposiciones y posibles deficiencias!) Por lo tanto, sería bueno ver que esta respuesta incluye al menos una breve descripción de las suposiciones y las razones para recomendar esta solución.
whuber
1
Ah, sí, me he vinculado a ese documento en una respuesta en un punto. Smithson (uno de los autores) tiene el artículo en su página web . El material suplementario está vinculado aquí .
Glen_b -Reinstale a Mónica el
1

Es posible que primero desee saber exactamente qué hace un modelo lineal. Intenta modelar una relación de la forma.

Yi=a+bXi+ϵi

Donde el ϵisatisfacer ciertas condiciones (heteroscedasticidad, varianza uniforme e independencia; wikipedia es un buen comienzo si eso no suena). Pero incluso si se verifican estas condiciones, no hay absolutamente ninguna garantía de que este sea el "mejor ajuste" en el sentido que está buscando: OLS solo está tratando de minimizar el error en la dirección Y, que es lo que está haciendo en su caso, pero que no es lo que parece ser la mejor opción.

Si un modelo lineal es realmente lo que está buscando, puede intentar transformar sus variables un poco para que OLS pueda ajustarse, o simplemente pruebe con otro modelo por completo. Es posible que desee buscar PCA o CCA, o si realmente está empeñado en usar un modelo lineal, pruebe la solución total de mínimos cuadrados , que podría dar un mejor "ajuste", ya que permite errores en ambas direcciones.

Youloush
fuente
Pensé que estaba buscando un mínimo de "mínimos cuadrados totales" para una función lineal (a + b * x + épsilon). Estoy perdido.
Timothée HENRY
1
Como lo usó, minimiza la suma de los residuos al cuadrado, es decir (yabx)2para cada punto de datos, llamado OLS (mínimos cuadrados ordinarios). No pude encontrar una buena imagen para OLS lineales, pero tal vez esta aún te sea ilustrativa. OLS está minimizando el cuadrado de las líneas verdes, lo estoy haciendo con una línea. En comparación, observe una imagen lineal de mínimos cuadrados totales .
Roland