Stargazer表格显示函数参数名而非变量名问题求助
解决stargazer显示函数参数名而非实际变量名的问题
问题根源
当直接传入df$VariableA这类向量给自定义函数时,lm()会将该向量识别为函数参数名x,而非原数据框中的变量名,导致stargazer输出时显示x而非VariableA这类实际变量名。
解决方案1:修改函数接受变量名字符串构造公式
这是最稳妥的方法,让函数基于数据框的变量名动态构建回归公式,而非直接传入向量:
{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) library(stargazer) df <- data.frame( VariableA = sample.int(100, 10000, replace = T), VariableB = sample.int(75, 10000, replace = T), Outcome1 = sample.int(10, 10000, replace = T), Outcome2 = sample.int(10, 10000, replace = T), Category = sample(LETTERS[1:3], 10000, replace = TRUE) # 修正原代码样本量不匹配问题 ) # 修改后的函数:接受变量名字符串 model_function <- function(x_var, y_var, data = df){ # 动态生成回归公式 formula <- as.formula(paste(y_var, "~", x_var, "+ Category")) lm(formula, data = data) } # 调用函数时传入变量名字符串 a <- model_function("VariableA", "Outcome1") b <- model_function("VariableB", "Outcome1") c <- model_function("VariableA", "Outcome2") d <- model_function("VariableB", "Outcome2") # 生成stargazer表格 stargazer(a,b,c,d, title = "修正后的输出", type = "html")
该方法拟合的模型会保留原数据框中的变量名,stargazer输出时就能正确显示VariableA、VariableB等名称,和手动编写公式的效果完全一致。
解决方案2:手动修改已拟合模型的变量名(临时方案)
如果不想修改函数结构,可以在模型拟合后手动替换结果中的变量名:
# 逐个修改模型的系数名和terms标签 names(a$coefficients)[names(a$coefficients) == "x"] <- "VariableA" attr(a$terms, "term.labels")[attr(a$terms, "term.labels") == "x"] <- "VariableA" names(b$coefficients)[names(b$coefficients) == "x"] <- "VariableB" attr(b$terms, "term.labels")[attr(b$terms, "term.labels") == "x"] <- "VariableB" names(c$coefficients)[names(c$coefficients) == "x"] <- "VariableA" attr(c$terms, "term.labels")[attr(c$terms, "term.labels") == "x"] <- "VariableA" names(d$coefficients)[names(d$coefficients) == "x"] <- "VariableB" attr(d$terms, "term.labels")[attr(d$terms, "term.labels") == "x"] <- "VariableB" # 生成stargazer表格 stargazer(a,b,c,d, title = "手动修改后的输出", type = "html")
这种方法适合临时调整,但模型数量较多时操作繁琐,优先推荐第一种方案。
内容的提问来源于stack exchange,提问作者Elizabeth Brown
相关产品推荐
相关产品推荐

