El cálculo de PRENSA de la estadística utilizando propio conjunto de datos se produce error en R

0

Pregunta

Yo estaba intentando calcular la PRENSA estadística utilizando el PRESS() la función de la qpcR paquete. Primero creo que la función de regresión a partir de los datos que me importan:

> job_proficiency_lm_first_order_formula_best = job_proficiency ~ T_1 + T_3 + T_4
> job_proficiency_lm_first_order_best_subs = lm(data = Job_Proficiency, formula = job_proficiency_lm_first_order_formula_best)
> summary(job_proficiency_lm_first_order_best_subs)

Call:
lm(formula = job_proficiency_lm_first_order_formula_best, data = Job_Proficiency)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.4579 -3.1563 -0.2057  1.8070  6.6083 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -124.20002    9.87406 -12.578 3.04e-11 ***
T_1            0.29633    0.04368   6.784 1.04e-06 ***
T_3            1.35697    0.15183   8.937 1.33e-08 ***
T_4            0.51742    0.13105   3.948 0.000735 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.072 on 21 degrees of freedom
Multiple R-squared:  0.9615,    Adjusted R-squared:  0.956 
F-statistic:   175 on 3 and 21 DF,  p-value: 5.16e-15

Como se puede ver la función de regresión se calcula con un enganche.

Pero cuando intento calcular el PRESS la estadística me sale lo siguiente:

> PRESS(object = job_proficiency_lm_first_order_best_subs)
.
Error in eval(predvars, data, env) : object 'T_1' not found

Para probar que la PRESS() la función en sí estaba trabajando yo intento conseguir que la PRENSA de la estadística con un sistema incorporado en el conjunto de datos de R, en particular la swiss conjunto de datos:

> test = lm(data = swiss, formula = Fertility ~ Agriculture + Examination)
> PRESS(test)
.........10.........20.........30.........40.......
$stat
[1] 4594.711

$residuals
 [1]   5.86874937  -0.11299684   8.99475044   9.63703923   6.86207418  -4.99681787  15.67581939  21.66065932   7.37038439  11.95400827  15.75323917   0.44045951  -4.80167644
[14]   2.81771330  -0.11677715   2.18088788   0.62738886  -6.43338393  -2.03263398   0.06287026   2.99119927  -7.88458225  -7.23342328  -8.51283184  -1.12064764   1.82564228
[27] -10.11322228  -9.54214928  -4.12165698  -6.78996076  -8.18443581  -9.65615193  -3.18410523  -2.56286583  -0.78611489 -12.32904436  10.00836421   6.33398831  11.08423270
[40]   7.20518930   6.42985483  15.41461736   4.64693055   4.94386095 -18.45443801 -27.04073067 -23.95733041

$P.square
[1] 0.3598858

Como se puede ver no fue ningún problema. Así que debe ser algo que se producen bajo el capó. Así que estoy aquí para preguntar ¿cuál podría ser el problema que me estoy encontrando?

Para referencia aquí es mi importados conjunto de datos no es demasiado grande, esperemos que no viola ninguna de las reglas:

> dput(Job_Proficiency)
structure(list(job_proficiency = c(88, 80, 96, 76, 80, 73, 58, 
116, 104, 99, 64, 126, 94, 71, 111, 109, 100, 127, 99, 82, 67, 
109, 78, 115, 83), T_1 = c(86, 62, 110, 101, 100, 78, 120, 105, 
112, 120, 87, 133, 140, 84, 106, 109, 104, 150, 98, 120, 74, 
96, 104, 94, 91), T_2 = c(110, 97, 107, 117, 101, 85, 77, 122, 
119, 89, 81, 120, 121, 113, 102, 129, 83, 118, 125, 94, 121, 
114, 73, 121, 129), T_3 = c(100, 99, 103, 93, 95, 95, 80, 116, 
106, 105, 90, 113, 96, 98, 109, 102, 100, 107, 108, 95, 91, 114, 
93, 115, 97), T_4 = c(87, 100, 103, 95, 88, 84, 74, 102, 105, 
97, 88, 108, 89, 78, 109, 108, 102, 110, 95, 90, 85, 103, 80, 
104, 83)), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -25L), spec = structure(list(cols = list(
    job_proficiency = structure(list(), class = c("collector_double", 
    "collector")), T_1 = structure(list(), class = c("collector_double", 
    "collector")), T_2 = structure(list(), class = c("collector_double", 
    "collector")), T_3 = structure(list(), class = c("collector_double", 
    "collector")), T_4 = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
"collector")), skip = 0), class = "col_spec"))

EDIT: por Lo que el primer error fue corregido gracias a @Otto, pero ahora estoy recibiendo un error diferente:

> job_proficiency_lm_first_order_best_subs = lm(data = Job_Proficiency, formula = job_proficiency ~ T_1 + T_3 + T_4)
> PRESS(job_proficiency_lm_first_order_best_subs)
.........10.........20.....
Error in PRESS.res^2 : non-numeric argument to binary operator

Todo lo que hice fue entrar en mi fórmula en el modelo de regresión de forma manual.

data-science dataset package r
2021-11-19 07:49:30
1

Mejor respuesta

1

Por alguna razón PRESS() parece esperar la fórmula para ser dado como cadena. Esto funciona:

library('qpcR')
job_proficiency_lm_first_order_best_subs = lm(data = Job_Proficiency, formula = job_proficiency ~ T_1 + T_3 + T_4)
PRESS(job_proficiency_lm_first_order_best_subs)
.........10
$stat
[1] 56.11556

$residuals
 [1]  4.24693620 -0.02950692 -0.24941392 -1.68812204  0.37184702 -3.35442911
 [7]  1.86363303 -1.48719175  3.34459605 -2.62766088

$P.square
[1] 0.9785162

Respecto a tu segundo error "Error in PRESS.res^2 : non-numeric argument to binary operator"Sospecho que es debido al hecho de que su Job_Proficiency es un tibble, y no de datos.marco. Las dos representaciones de datos son casi los mismos, excepto cuando no lo son.

Tal vez la forma más sencilla de abordar el segundo error es el de transformar los datos de entrada en una base de datos.marco de tibble por

Job_Proficiency <- as.data.frame(Job_Proficiency) 

y, a continuación, proceder con su análisis.

Como que a mí respecta, tanto de los problemas que hemos encontrado (fórmula no puede ser pre-asignados, y tibbles causar errores) son claros errores que deben ser reportados al programador de paquetes.

2021-11-19 10:35:42

hmmm interesante....así que tengo explícitamente la fórmula dentro de mi modelo de regresión....EDIT: Ahora estoy recibiendo un error diferente.....
dc3rd

Los datos publicados no replicar el error. Podría publicar una muestra de datos que produce el error?
Otto Kässi

Acabo de añadir todo el conjunto de datos a mi pregunta y yo era capaz de producir el error de nuevo.
dc3rd

@dc3rd tratar como.de datos.marco(Job_Proficiency) -> Job_Proficiency
Otto Kässi

Mis datos ya es un marco de datos.
dc3rd

No, no es, al menos de acuerdo a su dput() de salida. class = c("spec_tbl_df", "tbl_df", "tbl", "de datos.marco"). Probablemente leer en sus datos utilizando readr() para terminar la importación de un tibble.
Otto Kässi

así que hice uso read_table2() a partir de la tidyverse paquete y sé que tienden a inclinarse hacia tibbles. Pero cuando le pregunté que el programa que he utilizado is.data.frame() y respondió como TRUE....
dc3rd

Se trabajó utilizando tu sugerencia......Gracias. Voy a probar y les informe a los desarrolladores
dc3rd

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................