4 votos

Tener en cuenta los tratamientos múltiples para el mismo tema cuando los tratamientos son una variable numérica.

254 se preguntó a las personas de su intención de compra de un producto (en una escala 1-5) a diferentes precios \$699, \$799, \$899, \$999, y \$1099. The data looks like:

> head(price.responses)
  699 799 899 999 1099
1   4   4   3   3    2
2   5   5   4   4    5
3   4   4   4   5    5
4   1   2   3   4    5
5   1   1   3   5    5
6   5   3   3   2    1

I'm transforming the data like so:

people = rep(sapply(1:254, function(x) { paste("person", x, sep="")}), 5)
s.price.responses = stack(price.responses)
colnames(s.price.responses) = c("purchase_intent", "price")
s.price.responses$price = as.numeric(as.character(s.price.responses$price))
s.price.responses = cbind(s.price.responses, people)

> head(s.price.responses)
  purchase_intent price  people
1               4   699 person1
2               5   699 person2
3               4   699 person3
4               1   699 person4
5               1   699 person5
6               5   699 person6

A simple chi-squared test shows that the distributions of purchase intent is not the same across the the different price points

chisq.test(table(s.price.responses[,c("price", "purchase_intent")]))

        Pearson's Chi-squared test

data:  table(s.price.responses[, c("price", "purchase_intent")])
X-squared = 194.2906, df = 16, p-value < 2.2e-16

I'd like to do something like a repeated measures anova test which accounts for the fact that the same person was put through multiple samples (\$699, \$799,....) y una regresión lineal que daría una estimación de la relación entre purchase_intent ~ precio. Ahora mismo estoy haciendo:

price.regression = lm(purchase_intent ~ price + price:people, data=s.price.responses)

Estoy logrando lo que quiero lo que con este modelo? I. e. me estoy haciendo una estimación del efecto del precio en la purchase_intent una vez de contabilidad para la variación inherente entre la gente? Hay mejores métodos para lograr esto?

2voto

Zendmailer Puntos 138

La respuesta sencilla es que, aunque el modelo puede estar dando la adecuada estimación para el precio del coeficiente, es no darle la debida errores estándar grados de libertad, y las pruebas de significación. Esto es debido a que hay dos niveles de error en los datos: persona de nivel de error (por ejemplo, algunas personas pueden tener más fuertes intenciones de compra de los productos a cualquier precio; algunas personas pueden reaccionar más para el precio que otros) y de la observación del nivel de error (por ejemplo, una persona puede haber sido distraído al final del experimento y por lo tanto puede haber sido menos reflexivo acerca de sus respuestas en ese momento).

La forma correcta de modelo de datos de esta estructura es un modelo mixto o modelo lineal de efectos mixtos, que es una generalización del modelo de regresión lineal que permite a los más complejos error estructuras que el clásico modelo lineal. Modelos lineales de efectos mixtos dividir efectos en efectos fijos y de efectos aleatorios; los efectos fijos se supone que es el mismo para todas las unidades dentro de sus datos, mientras que los efectos aleatorios se puede variar a través de las unidades.

Uno de los clásicos de las aplicaciones del modelo lineal de efectos mixtos es de datos cuando se tienen múltiples observaciones por persona, como en su caso. Las "unidades" a través de la cual algunos de sus efectos pueden variar son las personas; como he mencionado anteriormente, podría ser que diferentes personas tienen línea de base de las intenciones de compra que son diferentes de los demás (es decir, los interceptos para algunas personas puede ser diferente que para otros) y diferentes personas reaccionan de manera diferente a la de los precios de los demás (es decir, las pendientes de precio para algunas personas puede ser diferente a la de los demás).

Modelos lineales de efectos mixtos es una amplia y rápida evolución de tema, así que le recomiendo hacer un poco de lectura si desea aplicar este método a los datos. Afortunadamente, hay una amplia variedad de recursos disponibles (incluyendo a muchos en este sitio). Usted también puede encontrar algunas buenas anotado recursos mediante el paquete lme4 en R, que es uno de los paquetes estándar para el ajuste de modelos lineales de efectos mixtos. . Tened en cuenta que, como con la mayoría de las técnicas estadísticas, la técnica en sí misma es inútil sin el conocimiento de cómo interpretar los resultados de la técnica.

Por último, he escrito algunos R código que simula algunos datos que podrían ser de la misma estructura como su propia y muestra cómo ajustar un modelo lineal de efectos mixtos para los datos.

require(lme4)
require(plyr)

set.seed(34)

id <- rep(1:254, 5)
id <- id[order(id)]
price <- rep(c(699, 799, 899, 999, 1099), 254)
d <- data.frame(id, price)

# Fixed effect of price
d$purchase_intent <- -.01 * price + 11.99

# Add in random effects at the person level
d <- ddply(d, "id", mutate,
           id_int = rnorm(1, sd = 1), # Random intercept for each person
           id_price = rnorm(1, sd = .01), # Random slope for each person
           purchase_intent = purchase_intent + id_int + id_price * price)

# Add in observation-level error
d$purchase_intent <- d$purchase_intent + rnorm(254 * 5, sd = 5)

# Rescale purchase_intent to be between 1 and 5
d$purchase_intent <- 5 * (d$purchase_intent -min(d$purchase_intent))/(max(d$purchase_intent) - min(d$purchase_intent))

# Fit the model. The parenthesis indicates the random effects for id.
# The (price|id) indicates that we are adding a random slope for each
# unit defined by id.  lmer also automatically adds a random intercept
# for each unit defined by id
mod <- lmer(purchase_intent ~ price + (price|id), data = d)
summary(mod)

Linear mixed model fit by REML ['lmerMod']
Formula: purchase_intent ~ I(price/100) + (I(price/100) | id)
   Data: d

REML criterion at convergence: 1140.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.3888 -0.5980  0.0045  0.6066  3.0172 

Random effects:
 Groups   Name         Variance Std.Dev. Corr 
 id       (Intercept)  0.046593 0.21585       
          I(price/100) 0.003676 0.06063  -0.20
 Residual              0.076685 0.27692       
Number of obs: 1270, groups:  id, 254

Fixed effects:
              Estimate Std. Error t value
(Intercept)   3.410020   0.051806   65.82
I(price/100) -0.049844   0.006683   -7.46

Correlation of Fixed Effects:
            (Intr)
I(pric/100) -0.814

whuber es correcto que usted puede desear para considerar el tratamiento de la purchase_intent como una variable ordinal. En psicología (mi campo), la mayoría de los revisores le permitirá tratar purchase_intent como un intervalo variable siempre y cuando cada una de las unidades que la variable está bien anclado y siempre que las instrucciones eran claras para los participantes. Sin embargo, si usted no se siente cómodo con el intervalo supuesto, usted puede utilizar un acumulado de enlace mixto modelo usando el ordinal paquete.

El uso de la clmm función, la función de ordinal que se ajusta a los modelos mixtos, es relativamente sencillo -- de la clmm función utiliza sintaxis muy similar como el lmer función. La principal limitación a clmm es que, en la actualidad, clmm no puede dar cabida al azar de las laderas.

Ver el fragmento de código siguiente para ver un ejemplo de cómo utilizar clmm. Este fragmento de código recoge con el conjunto de datos que he creado en el fragmento de código anterior.

require(ordinal)

# Make purchase_intent an ordered factor
d$purchase_intent <- ordered(round(d$purchase_intent, digits = 0))

mod <- clmm(purchase_intent ~ I(price/100) + (1 | id), data = d)
summary(mod)

Cumulative Link Mixed Model fitted with the Laplace approximation

formula: purchase_intent ~ I(price/100) + (1 | id)
data:    d

 link  threshold nobs logLik  AIC     niter     max.grad cond.H 
 logit flexible  1270 -970.87 1955.75 335(2599) 5.60e-04 4.9e+03

Random effects:
 Groups Name        Variance Std.Dev.
 id     (Intercept) 10.98    3.313   
Number of groups:  id 254 

Coefficients:
             Estimate Std. Error z value      Pr(>|z|)    
I(price/100) -0.30418    0.05116  -5.945 0.00000000276 ***
---
Signif. codes:  0 ‘***' 0.001 ‘**' 0.01 ‘*' 0.05 ‘.' 0.1 ‘ ' 1

Threshold coefficients:
    Estimate Std. Error z value
0|1 -14.7632     1.3767 -10.724
1|2 -11.3372     0.7626 -14.866
2|3  -5.5937     0.5599  -9.991
3|4   0.4206     0.5042   0.834
4|5   7.9041     0.9802   8.064

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: