如何用Stargazer展示岭回归?解决"Unrecognized object type"错误
问题:stargazer展示岭回归结果报错"Unrecognized object type"
我尝试用stargazer包展示ridge包拟合的岭回归结果时,出现错误:Error: Unrecognized object type.,核心代码如下:
# 数据预处理 base_sem_NAs_padronizada <- base_sem_NAs %>% mutate( HHI = as.numeric(scale(HHI)), log_pib = as.numeric(scale(log(pib_milhares))), pib_milhares = as.numeric(scale(pib_milhares)), log_pib_per_capita = as.numeric(scale(log(pib_per_capita))), pib_per_capita = as.numeric(scale(pib_per_capita)), incremento = as.numeric(scale(incremento)), log_pib_agricola = as.numeric(scale(log(pib_agricola))), pib_agricola = as.numeric(scale(pib_agricola)), pib_industria = as.numeric(scale(pib_industria)), populacao = as.numeric(scale(populacao)), ano_de_eleicao = as.numeric(scale(ano_de_eleicao)), nuvem = as.numeric(scale(nuvem)), area_km2 = as.numeric(scale(area_km2)), homicidio = as.numeric(scale(homicidio)), idhm_2010 = as.numeric(scale(idhm_2010)), incremento = incremento - mean(incremento) # 中心化响应变量 ) # 普通OLS回归 reg1 <- lm( incremento ~ pib_per_capita + ano_de_eleicao + nuvem + homicidio + idhm_2010 - 1, data = base_sem_NAs_padronizada ) # 计算岭回归的lambda参数 beta_original1 <- reg1$coefficients p1 <- length(beta_original1) sighat2_1 <- summary(reg1)$sigma^2 novo_k1 <- function(beta) p*sighat2_1/(t(beta)%*%beta) novo_beta1 <- function(k) { cur_fit1 <- ridge::linearRidge( incremento ~ pib_per_capita + ano_de_eleicao + nuvem + homicidio + idhm_2010 - 1, lambda = k, data = base_sem_NAs_padronizada, scaling = "none" ) return(cur_fit1$coef) } kk1 <- novo_k1(beta_original1) for(j in 1:200) kk1 <- kk1 %>% novo_beta1() %>% novo_k1() # 拟合最终岭回归模型 ridge_fit1 <- ridge::linearRidge( incremento ~ pib_per_capita + ano_de_eleicao + nuvem + homicidio + idhm_2010 - 1, lambda = kk1, data = base_sem_NAs_padronizada, scaling = "none" ) # 尝试用stargazer输出结果 stargazer(ridge_fit1)
错误信息:
Error: Unrecognized object type.
请问如何解决该问题?或者R中有哪些可生成优质回归结果表格的替代包?
解决方案与替代包推荐
一、解决stargazer的报错问题
stargazer默认仅支持lm、glm等标准线性模型对象,而ridge::linearRidge返回的是linearRidge类对象,不在stargazer的支持列表中。可以通过两种方式解决:
1. 手动提取统计量生成自定义表格
从岭回归结果中提取系数、标准误等关键信息,传入stargazer的自定义参数:
# 提取岭回归的核心统计量 ridge_coef <- coef(ridge_fit1) ridge_se <- sqrt(diag(vcov(ridge_fit1))) # 提取标准误 sample_size <- nrow(base_sem_NAs_padronizada) # 用stargazer生成自定义表格 stargazer( type = "text", # 可选"latex"或"html" title = "岭回归结果", covariate.labels = names(ridge_coef), coefficients = matrix(ridge_coef, ncol = 1), se = matrix(ridge_se, ncol = 1), nobs = sample_size, omit.stat = c("adj.rsq", "f") # 岭回归的调整R²和F检验参考价值有限,可省略 )
2. 转换模型对象类型(谨慎使用)
将linearRidge对象强制转换为lm类,但注意岭回归的部分统计量(如R²、标准误的计算逻辑)与普通OLS不同,可能导致输出结果有偏差:
class(ridge_fit1) <- c("lm", class(ridge_fit1)) stargazer(ridge_fit1)
二、替代包推荐
1. texreg
支持绝大多数R模型(包括linearRidge),输出格式灵活(文本、LaTeX、HTML),用法简单:
library(texreg) # 输出文本格式结果 texreg(ridge_fit1, type = "text") # 导出为HTML文件 texreg(ridge_fit1, type = "html", file = "ridge_reg_results.html") # 合并OLS和岭回归结果对比 texreg(list(OLS = reg1, Ridge = ridge_fit1), type = "latex")
2. modelsummary
功能强大的全能表格工具,支持几乎所有R模型,可输出到文本、HTML、LaTeX、Word,还支持自定义统计量、合并模型、添加注释:
library(modelsummary) # 输出文本格式结果 modelsummary(ridge_fit1, output = "text") # 合并OLS与岭回归,导出为可编辑的Word文档 modelsummary( list("普通回归" = reg1, "岭回归" = ridge_fit1), output = "ridge_comparison.docx", statistic = "std.error", title = "回归结果对比" )
3. gt + broom
适合需要精细调整表格样式的场景,用broom提取模型结果,再用gt自定义表格外观:
library(gt) library(broom) # 用broom整理岭回归结果为数据框 ridge_tidy <- tidy(ridge_fit1, conf.int = TRUE) # 生成样式自定义的表格 ridge_tidy %>% gt() %>% fmt_number(columns = c(estimate, std.error, statistic, p.value, conf.low, conf.high), decimals = 3) %>% tab_header(title = "岭回归系数及置信区间") %>% cols_label( term = "变量", estimate = "系数", std.error = "标准误", statistic = "t值", p.value = "P值", conf.low = "95%置信下限", conf.high = "95%置信上限" )
内容的提问来源于stack exchange,提问作者user13978099
相关产品推荐
相关产品推荐

