【问题标题】:How to obtain standardized betas from a svyglm() regression如何从 svyglm() 回归中获得标准化的 beta
【发布时间】:2021-01-20 12:50:26
【问题描述】:

我有一个 svyglm() 加权线性回归模型,并希望获得回归系数的标准化 beta。我尝试使用 lm.beta() 函数来获取它们,但是当我这样做时,系数的 p 值会发生变化。我也尝试过使用 effectsize:standardize_parameters() 函数,但这会返回未标准化的系数(与原始 svyglm() 模型中的系数相同)。如何获得具有正确 p 值的 svyglm() 模型的标准化系数?任何帮助将不胜感激。这是模型的代码:

library(tidyverse)
library(lm.beta)
library(survey)
library(sjstats)
dat <- read.csv("https://raw.githubusercontent.com/LucasTremlett/questions/master/questiondata.csv")
dat.weighted<- svydesign(ids = ~1, data = dat, weights = dat$weight)
model.weighted<- svyglm(DV~IV1+IV2+IV3, design=dat.weighted)
summary(model.weighted)

这是对我不起作用的两种方法的代码

##Withlmbeta()
model.weighted.lm.beta <- lm.beta(model.weighted)
summary(model.weighted.lm.beta)

##Witheffectsize:standardize_parameters()
effectsize::standardize_parameters(model.weighted)

【问题讨论】:

    标签: r regression survey weighted standardized


    【解决方案1】:

    这是一个模型

    data(api)
    dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc)
    model <- svyglm(api00~mobility, design=dstrat)
    

    我们想要估计的总体标准差

    vars<-svyvar(~api00+mobility, design=dstrat)
    sd.y <- sqrt(vars[1,1])
    sd.x <- sqrt(vars[2,2])
    

    现在是标准化测试版

    unstd.beta <- coef(model)[2]
    std.beta <- unstd.beta*sd.x/sd.y
    

    【讨论】:

      【解决方案2】:

      我不确定 lm.beta() 是否可以用于您的 svyglm 对象 - 这是一个 svy 回归,也是 glm 类型,而不是 lm 类型。

      如果lm.beta() 返回的系数是正确的(或者您可以在其他地方获得这些形式),那么获得“标准化 beta”的标准差似乎很简单。

      A common calculation of the 'standardized beta' 表明它只是乘以 x 和 y 的标准差的比率。然后,标准化的测试版,a random variable, is also given as the product of this ratio and the estimated s.e. of beta.

      # standardized coefficients
      st_mean <-  model.weighted.lm.beta$standardized.coefficients 
      
      # standardized coefficients' s.d.
      st_sd <- estimates_sd * standadizing_factors
      
      # standardized coefficients tstat
      st_tstat <- st_mean/st_sd
      
      result <- data.frame(tibble(st_mean, st_sd, st_tstat))
      row.names(result) <- names(model.weighted$coefficients)
      result %>% round(5)
      

      【讨论】:

      • 感谢您的回答,我最终只是在应用 svydesign() 函数之前对 IV 和 DV 进行了标准化,并在 svyglm() 回归中使用了这些标准化变量。 .
      • 您应该使用 $Y$ 和 $X$ 的估计总体 SD 进行标准化,而不是样本 SD。用svyvar得到估计的总体方差并取平方根得到估计的总体标准差
      猜你喜欢
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 2016-02-28
      • 2018-08-02
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多