Как получить стандартизированные бета-версии из регрессии svyglm()

У меня есть взвешенная модель линейной регрессии svyglm(), и я хотел бы получить стандартизированные бета-версии коэффициентов регрессии. Я попытался получить их с помощью функции lm.beta(), однако, когда я это делаю, p-значения коэффициентов меняются. Я также пытался использовать функцию effectize:standardize_parameters(), но она возвращает нестандартизированные коэффициенты (те же, что и в исходной модели svyglm()). Как я могу получить стандартизированные коэффициенты модели svyglm() с правильными p-значениями? Любая помощь будет принята с благодарностью. Вот код модели:

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)

person cholo.trem    schedule 05.10.2020    source источник


Ответы (2)


Я не уверен, что lm.beta() можно использовать для вашего объекта svyglm - это регрессия svy, а также типа glm, а не типа lm.

Если коэффициенты, возвращаемые lm.beta(), верны (или вы можете получить эту форму в другом месте), получение стандартных отклонений «стандартизированной бета-версии» кажется простым.

Обычный расчет "стандартизированного бета" предполагает, что он просто умножается на коэффициент стандартных отклонений x и y. Затем в качестве произведения этого отношения и расчетного с.э. бета-версии.

# 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)
person KM_83    schedule 05.10.2020
comment
Спасибо за ваш ответ, в итоге я просто стандартизировал IV и DV перед применением функции svydesign() и использовал эти стандартизированные переменные в регрессии svyglm(). . - person cholo.trem; 06.10.2020
comment
Вы должны стандартизировать, используя предполагаемое стандартное отклонение населения для $Y$ и $X$, а не выборочное стандартное отклонение. Получите расчетную дисперсию населения с помощью svyvar и извлеките квадратный корень, чтобы получить расчетное стандартное отклонение населения. - person Thomas Lumley; 06.10.2020

Вот модель

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
person Thomas Lumley    schedule 06.10.2020