2012-07-04 16 views
6

He estado tratando de averiguar cómo funciona el argumento subset en la función de R lm(). Especialmente el código follwoing parece dudosa para mí:¿Cómo funciona el argumento subconjunto en la función lm()?

data(mtcars) 
summary(lm(mpg ~ wt, data=mtcars)) 
summary(lm(mpg ~ wt, cyl, data=mtcars)) 

En todos los casos la regresión tiene 32 observaciones

dim(lm(mpg ~ wt, cyl ,data=mtcars)$model) 
    [1] 32 2 
    dim(lm(mpg ~ wt ,data=mtcars)$model) 
    [1] 32 2 

sin embargo, los coeficientes cambian (junto con el R²). La ayuda no proporciona demasiada información sobre este asunto:

subconjunto un vector opcional que especifica un subconjunto de las observaciones que se utilizará en el proceso de adaptación

+0

Si está trabajando con subconjuntos no numéricos, no olvide utilizar comillas. – user3598724

Respuesta

12

Como principio general, los vectores utilizados en subconjuntos puede ser lógico (por ejemplo, VERDADERO o FALSO para cada elemento) o numérico (por ejemplo, un número). Como característica para ayudar con el muestreo, si es numérica R incluirá el mismo elemento varias veces si aparece en un vector numérico de subconjuntos.

Vamos a echar un vistazo a cyl:

> mtcars$cyl 
[1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4 

Así que usted está recibiendo un hoja.de.datos de la misma longitud, pero está compuesto por fila 6, fila 6, fila 4, fila 6, etc.

esto se puede ver si hace lo mismo de subconjuntos:

> head(mtcars[mtcars$cyl,]) 
       mpg cyl disp hp drat wt qsec vs am gear carb 
Valiant  18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 
Valiant.1  18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 
Valiant.2  18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 
Merc 240D  24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 
Valiant.3  18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 

Quizás quiso decir que hacer algo como esto?

summary(lm(mpg ~ wt, cyl==6, data=mtcars)) 
+0

gracias por su rápida respuesta! Estaba adivinando que funciona así, pero en mi código real, el subconjunto usaba índices de filas que no estaban en los datos (estos fueron descartados por la función 'lm()') que me confundieron aún más;). De hecho me encontré con esto porque accidentalmente agregué una coma :) ¡tanques otra vez! – Seb

Cuestiones relacionadas