我正在分析一个数据集,其中 y 值为蛋白质水平范围为 0-3.6nmol/L。我对线性模型进行了 sqrt 变换,并尝试进行事后测试,但我的 emmean 值和置信区间没有意义,特别是因为其中一个平均值以某种方式结果为负。
我这样初始化我的模型:
fasting.sqrt <- lm(sqrt(FCP) ~ Type * BMI_Percentile, data = Database_Mexican_children_with_different_types_of_DM)
Run Code Online (Sandbox Code Playgroud)
然后制作我的数据框以供事后专门查看类型:
fasting.sqrt.emm = emmeans(fasting.sqrt, specs="Type") %>% as.data.frame()
Run Code Online (Sandbox Code Playgroud)
返回这个:
# Type emmean SE df lower.CL upper.CL
# 1 0.732 0.0980 129 0.538 0.926
# 2 -0.391 0.6511 129 -1.679 0.897
# 3 0.708 0.0728 129 0.564 0.852
# 4 0.260 0.8955 129 -1.512 2.032
Run Code Online (Sandbox Code Playgroud)
并且,使用此图形代码:
ggplot() +
geom_point(data=Database_Mexican_children_with_different_types_of_DM, aes(x=Type, y=FCP), alpha=0.3) +
geom_errorbar(data=fasting.sqrt.emm, aes(x=Type, ymin=lower.CL*abs(lower.CL), ymax=(upper.CL)^2), width=0.1) +
geom_point(data=fasting.sqrt.emm, aes(x=Type, y=emmean*abs(emmean)),
color="red", size=3) +
theme_classic()
Run Code Online (Sandbox Code Playgroud)
我使用 来abs()解释负值,因为平方会错误地设置较低的置信水平
我得到了这张图:
均值均应为正 0.7-2 左右,置信区间为 0 到 1-3 左右。
小智 5
尽管您提供的结果值lm()必然是非负的,但没有什么可以强制模型的结果预测为非负的。报告的emmeans()是模型的一种预测lm()。emmean你不能忽视for是负数的事实Type 2并任意取它提供的绝对值。
您的原始值图忽略了模型Type与看似连续BMI_Percentile预测变量之间的相互作用。通过这种交互,结果 和 之间的关联Type 取决于的值BMI_Percentile。emmeans您对原始数据的预测是基于具有该交互的整个模型的估计边际均值,并以 的平均值进行评估(默认情况下)BMI_Percentile。在具有不平衡数据的观察性研究中,这不一定是非常有用的比较,看起来确实如此。
您的调用emmeans()隐藏了模型中许多可能重要的内容及其交互项。您可能最好使用emtrends()包的功能来显示一系列BMI_Percentile值的结果。帮助页面似乎描述了您的情况:
emtrends当拟合模型涉及数值预测变量 x 与另一个预测变量 a(通常是因子)相互作用时,该函数非常有用。