Tengo una variable dependiente que puede variar desde 0 hasta el infinito, con 0 siendo realmente corregir observaciones. Entiendo la censura y Tobías modelos sólo se aplicará cuando el valor real de $Y$ es parcialmente desconocido o ausente, en cuyo caso los datos se dijo truncado. Algo más de información sobre datos censurados en este hilo.
Pero he aquí que 0 es un valor real que pertenece a la población. Ejecución de la OPERACIÓN en este tipo de datos tiene la particular molesto problema para llevar negativo de las estimaciones. ¿Cómo debo modelo de $Y$?
> summary(data$Y)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00 0.00 0.00 7.66 5.20 193.00
> summary(predict(m))
Min. 1st Qu. Median Mean 3rd Qu. Max.
-4.46 2.01 4.10 7.66 7.82 240.00
> sum(predict(m) < 0) / length(data$Y)
[1] 0.0972098
La evolución
Después de leer las respuestas, estoy de presentación de informes el ajuste de Gamma obstáculo modelo de uso ligeramente diferente de la estimación de funciones. Los resultados son bastante sorprendentes para mí. Primero echemos un vistazo a la DV. Lo que es evidente es extremadamente grasa de cola de datos. Esto tiene algunas consecuencias interesantes en la evaluación del ajuste que voy a comentar a continuación:
quantile(d$Y, probs=seq(0, 1, 0.1))
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.286533 3.566165 11.764706 27.286630 198.184818
He construido el Gamma obstáculo modelo de la siguiente manera:
d$zero_one = (d$Y > 0)
logit = glm(zero_one ~ X1*log(X2) + X1*X3, data=d, family=binomial(link = logit))
gamma = glm(Y ~ X1*log(X2) + X1*X3, data=subset(d, Y>0), family=Gamma(link = log))
Finalmente he evaluado la en la muestra de ajuste utilizando tres técnicas diferentes:
# logit probability * gamma estimate
predict1 = function(m_logit, m_gamma, data)
{
prob = predict(m_logit, newdata=data, type="response")
Yhat = predict(m_gamma, newdata=data, type="response")
return(prob*Yhat)
}
# if logit probability < 0.5 then 0, else logit prob * gamma estimate
predict2 = function(m_logit, m_gamma, data)
{
prob = predict(m_logit, newdata=data, type="response")
Yhat = predict(m_gamma, newdata=data, type="response")
return(ifelse(prob<0.5, 0, prob)*Yhat)
}
# if logit probability < 0.5 then 0, else gamma estimate
predict3 = function(m_logit, m_gamma, data)
{
prob = predict(m_logit, newdata=data, type="response")
Yhat = predict(m_gamma, newdata=data, type="response")
return(ifelse(prob<0.5, 0, Yhat))
}
Al principio me fue evaluar el ajuste por las medidas habituales: AIC, null desviación, error absoluto medio, etc. Pero mirando el cuantil errores absolutos de las funciones anteriores se destacan algunas cuestiones relacionadas con la alta probabilidad de un 0 de los resultados y el $Y$ extrema de grasa de la cola. Por supuesto, el error crece exponencialmente con mayores valores de Y (hay también un gran valor Y en Max), pero lo que es más interesante es que en gran medida dependen de la modelo logit para estimar 0s producir una mejor distribución de ajuste (no sabría cómo describir mejor este fenómeno):
quantile(abs(d$Y - predict1(logit, gamma, d)), probs=seq(0, 1, 0.1))
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
0.00320459 1.45525439 2.15327192 2.72230527 3.28279766 4.07428682 5.36259988 7.82389110 12.46936416 22.90710769 1015.46203281
quantile(abs(d$Y - predict2(logit, gamma, d)), probs=seq(0, 1, 0.1))
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
0.000000 0.000000 0.000000 0.000000 0.000000 0.309598 3.903533 8.195128 13.260107 24.691358 1015.462033
quantile(abs(d$Y - predict3(logit, gamma, d)), probs=seq(0, 1, 0.1))
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
0.000000 0.000000 0.000000 0.000000 0.000000 0.307692 3.557285 9.039548 16.036379 28.863912 1169.321773