异方差一致(稳健)标准误差由 i) beta 置信区间、ii) 容差和 iii) R 中的 VIF 值补充?

问题描述 投票:0回答:1

为了解决数据中的异方差性,我使用异方差一致(“稳健”)标准误进行回归。我使用了 SPSS,但据我目前所知,它只能输出以下值(列): heteroscedasticity-consistent SEs 我还想报告 i) 标准化贝塔值和置信区间,ii) 容差和 iii) VIF。有没有办法用 R 获得这些值?具有稳健 SE 的参数估计的 R 输出,例如使用三明治包似乎并不容易提供它们。我希望能够生成一个类似于此图中第一个表的表: regression table with more data,但另外还有 beta 的置信区间(而不是非标准化系数)。

这里是数据集(如果有帮助):https://docs.google.com/spreadsheets/d/13U7xDK7otj-vBOcx6yTpsguAd-wlFNad/edit?usp=sharing&ouid=113244913961284427801&rtpof=true&sd=true

提前非常感谢!每一点点都有帮助。

r statistics confidence-interval coefficients covariance-matrix
1个回答
0
投票

从 SPSS 到 R 一开始会很困难,当您习惯于直接从默认输出获取进行回归诊断所需的系数时。但是,您使用 R 的时间越多,您就越能认识到它通过提供丰富的可能性和选项所提供的自由。

以下是获得您想要的结果的方法:

#------------------------
# Load required packages
#------------------------
library (dplyr)
library (car)


#------------------------
# Fit a linear regression model (using the iris dataset in this example)
# Sepal.Length is the dependent variable
# Sepal.Width, Petal.Length, Petal.Width are the independent variables (predictors)
#------------------------
fit <- iris %>%
  lm (Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, data=.)


#------------------------
# Create an object containing the model summary information
#------------------------
mod_summary <- summary (fit)


#------------------------
# Create a data.frame containing 95%CIs for Estimate
#------------------------
conf_ints <- confint (fit, level = 0.95) |> 
  as.data.frame () |> 
  tibble::rownames_to_column("Variables") |> # make rownames a column called "Variables"
  `colnames<-`(c("Variables", "95%CI_low", "95%CI_hi")) # set column names

#------------------------
# Create a data.frame containing VIF & Tolerance
#------------------------
VIF_tol = vif(fit) |> # calculate VIF
  as.data.frame () |>
  tibble::rownames_to_column("Variables") |>
  mutate (Tolerance = 1/`vif(fit)`) |> # calculate Tolerance given by 1/VIF
  `colnames<-`(c("Variables", "VIF", "Tolerance"))


#------------------------
# Put it all together using left_join by "Variables", format & arrange columns
#------------------------
output <- mod_summary$coefficients |>
  as.data.frame () |>
  tibble::rownames_to_column("Variables") |>
  left_join (conf_ints, by = "Variables") |> # left_join with conf_ints data.frame
  left_join (VIF_tol, by = "Variables") |> # left_join with VIF_tol data.frame
  mutate (across(c(2:4, 6:9), .fns = function(x) {format(round(x, 2), nsmall = 2)})) |> # set decimal numbers for all columns (except p-values) to 2 
  relocate (`95%CI_low`, .after = Estimate) |>
  relocate (`95%CI_hi`, .after = `95%CI_low`)

output[ ,7] <- format.pval(output[ ,7], eps = .001, digits = 3) # format small p-values < 0.001 nicely

output

     Variables Estimate 95%CI_low 95%CI_hi Std. Error t value Pr(>|t|)   VIF Tolerance
1  (Intercept)     1.86      1.36     2.35       0.25    7.40   <0.001    NA        NA
2  Sepal.Width     0.65      0.52     0.78       0.07    9.77   <0.001  1.27      0.79
3 Petal.Length     0.71      0.60     0.82       0.06   12.50   <0.001 15.10      0.07
4  Petal.Width    -0.56     -0.81    -0.30       0.13   -4.36   <0.001 14.23      0.07

© www.soinside.com 2019 - 2024. All rights reserved.