创建一个函数(x),包括glm(... 〜x,...)时x = parameter1 * parameter2。 GLM()的摘要仅显示截距和X(不是参数)

发布于 2025-02-11 11:09:17 字数 1056 浏览 0 评论 0 原文

在那里,您可以看到我的代码和输出R给出。我的问题是:在GLM()摘要中,如何将R打印为函数的参数为​​分离值。因此,拦截,性别_m0,age_cented and gender_m0 * age_cented而不是拦截和y?我希望有人可以帮助我解决我的小问题。谢谢。

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白况 2025-02-18 11:09:17

内部公式的术语永远不会被替换而是从字面上替代,因此 glm 正在您的数据框架中寻找一个称为“参数”的列,这当然不存在。您需要从呼叫中捕获参数,去除它们并构建公式,如果您想以这种方式调用您的功能:

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)
}

显然,我没有您的数据,但是如果我创建了带有相同名称的少量示例数据框架,我们可以看到这项工作如预期的:

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

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)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文