Estoy tratando de hacer una simple regresión de mínimos cuadrados en R y que ha estado recibiendo los errores constantemente. Esto es muy frustrante, ¿alguien puede señalar lo que estoy haciendo mal?

Primero me fije el conjunto de datos (17 variables, 440 observaciones, cada observación en una sola línea, no los títulos de las columnas). Aquí, me sale un «enmascarado» de error. Por lo que he leído, el «enmascarado» error sucede cuando los objetos se superponen. Sin embargo aquí no estoy usando ningún paquetes pero el valor por defecto, y he cargado una nueva área de trabajo de la imagen antes de esto. No está seguro de lo que este error se refiere?

> cdi=read.table("APPENC02.txt", header=FALSE)
> attach(cdi)
The following objects are masked from cdi (position 3):

    V1, V10, V11, V12, V13, V14, V15, V16, V17, V2, V3, V4, V5, V6, V7, V8, V9

Siguiente, ya que el conjunto de datos no vienen con títulos, yo uso el colnames() comando para agregar los nombres de columna, a continuación, comprobar mi trabajo con el head() comando:

colnames(cdi)<- c("IDnmbr","Countynm","Stateabv","LandArea","totpop","youngpct","oldpct","actphy","hspbed","srscrime","hsgrad","BAgrad","povpct","unempct","pcincome","totincome","georegion")
> head(cdi)
  IDnmbr    Countynm Stateabv LandArea  totpop youngpct oldpct actphy hspbed srscrime hsgrad BAgrad povpct unempct pcincome totincome georegion
1      1 Los_Angeles       CA     4060 8863164     32.1    9.7  23677  27700   688936   70.0   22.3   11.6     8.0    20786    184230         4
2      2        Cook       IL      946 5105067     29.2   12.4  15153  21550   436936   73.4   22.8   11    etcetc(manually truncated)

Ahora la parte más molesta: no puedo obtener el lm() funcione!

> model1=lm(actphy~totpop)
Error in eval(expr, envir, enclos) : object 'actphy' not found

No es un mayúsculas/minúsculas problema, y he tratado de "actphy" y actphy. ¿Por qué?

También, el manual estoy siguiendo sugiere el uso de los attach() función, pero he leído un par de posts es desalentador. ¿Cuál sería una mejor solución en este caso?

Gracias!

  • Solo tienes que usar lm(actphy ~ totpop, data = cdi) para que lm sabe donde encontrar las variables en la fórmula (que no están en el mundial de medio ambiente/área de trabajo, están en el marco de datos que ha creado). Por cierto, para la solución de problemas es útil para limpiar el área de trabajo antes de intentar las cosas, puede utilizar rm(list = ls()). ls() indica qué variables están en su área de trabajo en cualquier momento.
  • Este es un excelente ejemplo de por qué attach es terrible, y el uso de la misma en el comienzo de un R tutorial es una buena razón para ejecutar la otra dirección, rápido.
  • …no se trata de «un par de posts» que advierten acerca de su uso, lea la documentación en ?attach! Si los documentos son de advertencia para evitar esto, tenga cuidado con la gente de la escritura «tutoriales» de recomendarlo.
  • Sí, pero este es un buen bocado: En uso interactivo», con » es preferible el uso de ‘adjuntar’/’separar’, a menos que cuando ‘lo que’ es ‘save()’-archivo producido en cuyo caso ‘attach()’ es un (seguridad) contenedor para ‘load()’.
  • gracias @bryanhanson y joran! ¿ustedes tienen una respuesta a la primera parte (el origen de mi «objeto no encontrado» y «enmascarado» errores)?
  • El objeto no encontrado resultados de actphy no estar en la ruta de búsqueda, por mi comentario. El enmascaramiento significa que usted tuvo objetos en su espacio de trabajo llamado V1...Vn ya. Es por eso que me sugirió el uso de ls() para ver lo que hay ya. Otra cosa realmente útil saber es str(some_object) que muestra cómo se almacenan.

InformationsquelleAutor ethane | 2014-09-09

1 Comentario

  1. 7

    Como @joran comentarios, attach es una cosa peligrosa. Acaba de ver, por ejemplo, este sencillo conjunto de código:

    > x <- 2:1
    > d <- data.frame(x=1:2, y=3:4)
    > lm(y~x)
    Error in eval(expr, envir, enclos) : object 'y' not found
    > lm(y~x, data=d)
    
    Call:
    lm(formula = y ~ x, data = d)
    
    Coefficients:
    (Intercept)            x  
              2            1  
    
    > attach(d)
    The following object is masked _by_ .GlobalEnv:
    
        x
    
    > lm(y~x, data=d)
    
    Call:
    lm(formula = y ~ x, data = d)
    
    Coefficients:
    (Intercept)            x  
              2            1  
    
    > lm(y~x)
    
    Call:
    lm(formula = y ~ x)
    
    Coefficients:
    (Intercept)            x  
              5           -1  

    Utilizando attach pone los datos.marco de la ruta de búsqueda, que le permite engañar en lm al no especificar un data argumento. Sin embargo, esto significa que si hay objetos en su entorno global que tienen nombres en conflicto con los objetos en su base de datos.marco, cosas raras, puede suceder, como en los dos últimos resultados en el código mostrado arriba.

Dejar respuesta

Please enter your comment!
Please enter your name here