如何让mgcv::gam的参数系数显示实际处理名称而非后缀字母?
使用mgcv包gamm函数建模的分类变量系数命名问题
在使用mgcv包的gamm()函数建模时遇到问题:参数系数中的分类变量food被标记了.L、.Q、.C这类后缀,无法看到实际的水平名称,但平滑项却能正常显示处理名称。之前通过在处理列名前添加O的方法解决过类似问题,但此次无效。已将所有分组变量转为因子,还创建了带O前缀的Ofood列(用于后续生成求和平滑曲线),附上模型输出及代码寻求解决建议:
模型输出
Family: quasipoisson Link function: log Formula: weekly_eggs ~ food + s(week) + s(week, by = Ofood) + s(id, bs = "re") Parametric coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.5624 0.2031 -2.769 0.00581 ** food.L 0.1011 0.4086 0.247 0.80473 food.Q 0.5398 0.4076 1.324 0.18594 food.C 0.2136 0.4053 0.527 0.59838 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Approximate significance of smooth terms: edf Ref.df F p-value s(week) 6.403 6.403 49.376 < 2e-16 *** s(week):Ofoodlow 1.000 1.000 0.001 0.976359 s(week):Ofoodmed 1.000 1.000 14.360 0.000167 *** s(week):Ofoodhigh 2.078 2.078 1.656 0.141125 s(id) 43.669 49.000 12.984 < 2e-16 ***
代码
df_P_egg_gamm$id = as.factor(df_P_egg_gamm$id) df_P_egg_gamm$food = as.factor(df_P_egg_gamm$food) df_P_egg_gamm$Ofood = factor(df_N_P_egg_gamm$food, ordered=T) egg_gamm_P = gamm(weekly_eggs ~ food + s(week) + s(week, by=Ofood) + s(id, bs="re"), family="quasipoisson", correlation=corCAR1(form=~week|id), data=df_P_egg_gamm)
解决建议
修正
food因子的有序性:输出中的.L(线性)、.Q(二次)、.C(三次)后缀,说明food被当作有序因子处理了。你创建Ofood时用了ordered=T,但food作为主效应变量应该设为普通因子,显式指定即可:df_P_egg_gamm$food = factor(df_P_egg_gamm$food, ordered = FALSE)这样参数系数会显示每个水平的实际名称,而非正交多项式后缀。
统一数据集的因子来源:代码中
Ofood用的是df_N_P_egg_gamm$food,而food用的是df_P_egg_gamm$food,确认两个数据集的food水平完全一致,避免因数据来源差异导致的因子处理异常。手动设置对比方式:如果上述方法无效,可强制将
food的对比类型设为处理对比,覆盖默认的正交多项式对比:contrasts(df_P_egg_gamm$food) = contr.treatment(levels(df_P_egg_gamm$food))此时参数系数会以第一个水平为参照,显示其余水平的具体名称。
内容的提问来源于stack exchange,提问作者lmbradley
相关产品推荐
相关产品推荐

