Home > Mobile >  Create a function(x) including glm(... ~ x, ...) when x = parameter1 * parameter2. Summary of glm()
Create a function(x) including glm(... ~ x, ...) when x = parameter1 * parameter2. Summary of glm()

Time:06-30

There you can see my code and the output r gives. My question is: How can I get r to print the arguments of the function as separated values in the summary of glm(). So the intercept, gender_m0, age_centered and gender_m0 * age_centered instead of the intercept and the y? I hope someone could help me with my little problem. Thank you.

test_reg <- function(parameters){
  glm_model2 <- glm(healing ~ parameters, family = "binomial", data = psa_data)
  summary(glm_model2)}

test_reg(psa_data$gender_m0 * age_centered)

Call:
glm(formula = healing ~ parameters, family = "binomial", data = psa_data)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.2323   0.4486   0.4486   0.4486   0.6800  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  2.24590    0.13844  16.223   <2e-16 ***
parameters  -0.02505    0.01369  -1.829   0.0674 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 426.99  on 649  degrees of freedom
Residual deviance: 423.79  on 648  degrees of freedom
  (78 Beobachtungen als fehlend gelöscht)
AIC: 427.79

Number of Fisher Scoring iterations: 5

CodePudding user response:

The terms inside formulas are never substituted but taken literally, so glm is looking for a column called "parameters" in your data frame, which of course doesn't exist. You will need to capture the parameters from your call, deparse them and construct the formula if you want to call your function this way:

test_reg <- function(parameters) {

  f <- as.formula(paste0("healing ~ ", deparse(match.call()$parameters)))
  mod <- glm(f, family = binomial, data = psa_data)
  mod$call$formula <- f
  summary(mod)
}

Obviously, I don't have your data, but if I create a little sample data frame with the same names, we can see this works as expected:

set.seed(1)

psa_data <- data.frame(healing = rbinom(20, 1, 0.5),
                       age_centred = sample(21:40),
                       gender_m0 = rbinom(20, 1, 0.5))

test_reg(age_centred * gender_m0)
#> 
#> Call:
#> glm(formula = healing ~ age_centred * gender_m0, family = binomial, 
#>     data = psa_data)
#> 
#> Deviance Residuals: 
#>    Min      1Q  Median      3Q     Max  
#> -1.416  -1.281   0.963   1.046   1.379  
#> 
#> Coefficients:
#>                       Estimate Std. Error z value Pr(>|z|)
#> (Intercept)            1.05873    2.99206   0.354    0.723
#> age_centred           -0.02443    0.09901  -0.247    0.805
#> gender_m0             -3.51341    5.49542  -0.639    0.523
#> age_centred:gender_m0  0.10107    0.17303   0.584    0.559
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 27.526  on 19  degrees of freedom
#> Residual deviance: 27.027  on 16  degrees of freedom
#> AIC: 35.027
#> 
#> Number of Fisher Scoring iterations: 4

Created on 2022-06-29 by the reprex package (v2.0.1)

  • Related