这是运行单个固定效应方法的三种不同方法,它们给出或多或少相同的结果(见下文)。我的主要问题是如何使用第二个模型 ( model_plm) 或第三个模型 ( model_felm) 获得预测概率或平均边际效应。我知道如何使用第一个模型 ( model_lm) 来做到这一点,并使用下面的示例来展示ggeffects,但这仅在我有一个小样本时才有效。
由于我有超过一百万人,我的模型只能使用model_plm和来工作model_felm。如果我使用model_lm,则需要花费大量时间来运行一百万个人,因为它们是在模型中受到控制的。我还收到以下错误:Error: vector memory exhausted (limit reached?)。我检查了 StackOverflow 上的许多线程来解决该错误,但似乎没有任何解决方案。
我想知道是否有有效的方法来解决这个问题。我的主要兴趣是提取交互的预测概率residence*union。我通常使用以下软件包之一提取预测概率或平均边际效应:ggeffects、emmeans或margins。
library(lfe)
library(plm)
library(ggeffects)
data("Males")
model_lm = lm(wage ~ exper + residence+health + residence*union +factor(nr)-1, data=Males)
model_plm = plm(wage ~ exper + residence + health + residence*union,model = "within", index=c("nr", "year"), data=Males)
model_felm = felm(wage ~ exper + residence + health …Run Code Online (Sandbox Code Playgroud) 我想在 Julia 中绘制一个复杂的图表。下面的代码是使用 ggplot 的 Julia 版本。
using CairoMakie, DataFrames, Effects, GLM, StatsModels, StableRNGs, RCall
@rlibrary ggplot2
rng = StableRNG(42)
growthdata = DataFrame(; age=[13:20; 13:20],
sex=repeat(["male", "female"], inner=8),
weight=[range(100, 155; length=8); range(100, 125; length=8)] .+ randn(rng, 16))
mod_uncentered = lm(@formula(weight ~ 1 + sex * age), growthdata)
refgrid = copy(growthdata)
filter!(refgrid) do row
return mod(row.age, 2) == (row.sex == "male")
end
effects!(refgrid, mod_uncentered)
refgrid[!, :lower] = @. refgrid.weight - 1.96 * refgrid.err
refgrid[!, :upper] = @. refgrid.weight + 1.96 * …Run Code Online (Sandbox Code Playgroud) 我正在提取两个不同组的回归结果,如下面的示例所示。在tempdata.frame 中,我得到估计值、std.error、统计量和 p 值。但是,我没有得到置信区间。有没有一种简单的方法来提取它们?
df <- tibble(
a = rnorm(1000),
b = rnorm(1000),
c = rnorm(1000),
d = rnorm(1000),
group = rbinom(n=1000, size=1, prob=0.5)
)
df$group = as.factor(df$group)
temp <- df %>%
group_by(group) %>%
do(model1 = tidy(lm(a ~ b + c + d, data = .))) %>%
gather(model_name, model, -group) %>%
unnest()
Run Code Online (Sandbox Code Playgroud) 我在问一个已经回答的问题:用 dplyr 创建一个排名变量?. 但是由于一些奇怪的原因,该方法不适用于我的数据。我正在按国家对两个时期之间的失业率差异进行排名。
我按照建议使用此代码:
df %>% mutate(rank = dense_rank(desc(difference)))
Run Code Online (Sandbox Code Playgroud)
但我得到 1 作为所有国家的排名。有人能告诉我出了什么问题吗?
这是我的数据:
structure(list(cntry = structure(1:23, .Label = c("Austria",
"Belgium", "Switzerland", "Czech Republic", "Germany", "Denmark",
"Estonia", "Greece", "Spain", "Finland", "France", "Hungary",
"Ireland", "Iceland", "Italy", "Luxembourg", "Netherlands", "Norway",
"Poland", "Portugal", "Sweden", "Slovakia", "United Kingdom"), class = "factor"),
difference = c(0.0321271618815491, -0.0251554839428438, 1.15072942999273,
1.33128598731325, -2.26400160811014, 3.15779980836141, 6.80457896869579,
6.70389987400804, 10.8919891165462, 0.547460084552159, 0.906834874234579,
3.01112447330944, 8.5885631447415, 3.75206570820895, 1.58794503937105,
0.334356006591187, 0.664766564981566, 0.0155501469693973,
-0.984605793974606, 4.28470580541735, 1.11996749834057, 1.67278245779503,
1.93783051552776)), row.names = c(NA, -23L), groups = …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 tidyverse 中为下面的数据使用传播函数的不同方法,但没有成功。目的是为变量中的值的每个 id 1 和 0 提供一个新列:health、ci_high、ci_low。
id unemployment health ci_high ci_low
1 5 100 110 90
1 10 80 90 70
1 15 70 80 60
0 5 90 100 80
0 10 50 60 40
0 15 40 50 30
structure(list(id = structure(c(1, 1, 1, 0, 0, 0), format.stata = "%9.0g"),
unemployment = structure(c(5, 10, 15, 5, 10, 15), format.stata = "%9.0g"),
health = structure(c(100, 80, 70, 90, 50, 40), format.stata = "%9.0g"),
ci_high = structure(c(110, 90, …Run Code Online (Sandbox Code Playgroud) r ×4
dplyr ×2
broom ×1
emmeans ×1
ggplot2 ×1
julia ×1
panel-data ×1
regression ×1
tidyverse ×1