表示分析不起作用,疯狂的值和图表

pre*_*ent 4 r graph emmeans

我正在分析一个数据集,其中 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_Percentileemmeans您对原始数据的预测是基于具有该交互的整个模型的估计边际均值,并以 的平均值进行评估(默认情况下)BMI_Percentile。在具有不平衡数据的观察性研究中,这不一定是非常有用的比较,看起来确实如此。

您的调用emmeans()隐藏了模型中许多可能重要的内容及其交互项。您可能最好使用emtrends()包的功能来显示一系列BMI_Percentile值的结果。帮助页面似乎描述了您的情况:

emtrends当拟合模型涉及数值预测变量 x 与另一个预测变量 a(通常是因子)相互作用时,该函数非常有用。