7 votos

Efecto no lineal en un término de interacción

Si usted tiene B, que es un 0/1 variable de resultado, S, que es una variable continua, y T, que es un tratamiento variable ficticia, ¿cómo se puede demostrar una hipótesis de no-efecto lineal utilizando los resultados de la regresión y una gráfica?

Por ejemplo, que la hipótesis de que el tratamiento de los asuntos de la mayoría de aquellos en el medio de la S's de distribución.

La regresión he estado en funcionamiento es B = S + T + ST.

Cualquier cites sobre el tema también sería apreciada.

12voto

dan90266 Puntos 609

Los siguientes usos de la R rms paquete utilizando mínimos cuadrados ordinarios de modelado, y de los modelos el efecto no lineal sin problemas el uso restringido de interpolación cúbica, con 4 nudos en defecto nudo lugares. Esto genera una componente lineal y 2 componentes no lineales para un total de 3 parámetros por grupo de tratamiento.

require(rms)
dd <- datadist(mydata); options(datadist='dd')  # facilitates plotting
f <- ols(B ~ rcs(S, 4) * T, data=mydata)
anova(f)    # tests for interaction (shape differences across T, 3 d.f.)
            # anova includes a test for nonlinear interaction
            # also provides a global test for T, 4 d.f.
plot(Predict(f, S, T))   # shows 2 estimated curves for 2 values of T
ggplot(Predict(f, S, T))  # will be in next release; uses ggplot2

Las parcelas incluyen 0.95 pointwise bandas de confianza. Hay una opción para el uso simultáneo de confianza bandas en su lugar.

Porque vi "ols" que se menciona en otros lugares me ignorado que la variable de respuesta es categórica. Para el ajuste del modelo de regresión logística en lugar de un modelo ols, sustituto lrm( ) para ols( ). Ningún otro código que se necesitan cambios. Usted puede utilizar summary(f, ...) para obtener el cociente de probabilidades para T o S. Por defecto, el odds ratio para el S será la inter-cuartil-efecto gama de S en la referencia (más frecuente), a nivel de T.

6voto

ErikL Puntos 176

Esto es exactamente por qué me cambié de Stata a R y Frank rms del paquete (llamado Diseño en aquel entonces) hace un par de años.

De todos modos, esto de alguna manera hack-ish código de al menos empezar. La sintaxis es un poco anticuado, y no puede haber mejores formas de este código (no se ha usado el programa Stata en un tiempo), pero aquí va

EDICIÓN: Re-escrito después de mi café de la mañana...

*** use automobile data
sysuse auto 

*** create restricted cubic spline basis functions for mpg, with four knots
mkspline mpgsp = mpg, cubic nknots(4) 

*** create the interactions
gen formpg1=foreign*mpgsp1
gen formpg2=foreign*mpgsp2
gen formpg3=foreign*mpgsp3

*** Regressing price on foreign and mpg allowing for non-linear interactions
xi: reg price i.foreign mpgsp* formpg* 

Para probar la interacción total

test formpg1 formpg2 formpg3 

Omitir el primer plazo para el examen de cualquier no-lineal de los términos de interacción, por ejemplo,

test formpg2 formpg3

Para obtener el global 4 d.f. prueba de T, que en este ejemplo es extranjero, que Frank mencionadas en el ejemplo de arriba

test _Iforeign_1 formpg1 formpg2 formpg3

Solo cambie reg a logit de regresión logística. Para representar gráficamente el resultado, que se necesita para formar el predictor lineal, utilizando, por ejemplo, predictnl, que nunca me las arreglé para conseguir la derecha.

Ver una presentación reciente por Patrick Royston en http://www.stata.com/meeting/germany12/abstracts/desug12_royston.pdf para algunas ideas.

Espero que esto ayude.

4voto

generic_user Puntos 2269

Ha considerado el uso de un modelo aditivo generalizado? Enlace de Wikipedia aquí

Básicamente, el modelo sería $$ g(y) = X'\beta+\displaystyle\sum_j f_j(Z_j)+\epsilon $$

o en su caso específico $$ B = logit\left(f(S,T)\right) $$ En R, se podría utilizar el mgcv paquete y ejecutar algo como

library(mgcv)
m = gam(B~te(S,T),family=binomial)

lo que le daría un test no paramétrico de la interacción de las dos variables. Si se quería separar principales efectos de la interacción efecto, se podría equivalentemente ajuste

m = gam(B~ti(S)+ti(T)+ti(S,T),family=binomial)

a continuación, puede ver en los gráficos de contorno estimada de su interacción a través de plot(m,pages=1, scheme=2) (yo prefiero el contorno de las parcelas, a mí), o puede utilizar la vis.gam función para buscar en los valores de la predicción.

O, si su tratamiento T es binario, que podría encajar

m = gam(B~s(S,by=as.factor(T)),family=binomial)

El libro de texto en todo esto es para ir con el paquete de R, y es aquí esta, por Simón de Madera.

También le recomendamos visitar ?te, ?ti, etc.

0voto

The Diamond Z Puntos 94

Pueden argumentar un efecto no lineal, mostrando que un modelo no lineal se ajusta mejor. Por ejemplo usted podría implementar una por trozos linear modelo a tener en cuenta los cambios en la influencia de S. dependiente en su hipótesis, usted podría también linearise sus factores. Por ejemplo, una transformación de registro de factores puede reducir sus residuos. Esto podría utilizarse para argumentar que la relación entre factores y la respuesta no es lineal, puesto que las variables transformadas se ajuste mejor. Espero que te sirva.

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