You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中gnm()与Dref()函数使用问题及报错求助

gnm包Dref模型问题解答

一、模型1的警告解释

运行Dref(m107_f, y19_f)时,gnm会弹出提示性警告,核心是告知你当前模型使用了默认的delta对比设置——默认用m107_f和y19_f自身的类别顺序生成两个delta变量(对应后续的delta1、delta2)。这个警告不是错误,只是提醒你:如果你的分析目标是聚焦SES的向上/向下流动这类自定义对比,需要手动指定delta参数,而非依赖默认设置。

二、delta1和delta2系数的含义

对角线参考模型(Dref)将数据分为两类:对角线组(SES未变化,即m107_f = y19_f)和非对角线组(SES发生流动)。两个delta系数的含义如下:

  • Dref(m107_f, y19_f)delta1:对应107月龄SES(m107_f)的类别顺序效应,衡量初始SES不同水平在“SES未流动”人群中对R_SDNN的影响差异。
  • Dref(m107_f, y19_f)delta2:对应19岁SES(y19_f)的类别顺序效应,衡量最终SES不同水平在“SES未流动”人群中对R_SDNN的影响差异。

简单来说,这两个系数反映的是稳定SES群体中,初始/最终SES本身对因变量的作用,而非流动带来的效应。

三、模型2报错的解决方法

报错Error in eval(x) : object 'downward' not found有两个核心原因:一是delta参数的写法错误,二是流动变量创建时可能存在变量名误用。

修正步骤:

  1. 先将SES变量转为有序因子
    要正确判断SES流动方向,必须让m107_f和y19_f的类别顺序符合逻辑(Low < MidLow < MidHigh < High):
Sey518$m107_f = factor(Sey518$m107_f, levels = c("Low", "MidLow", "MidHigh", "High"), ordered = TRUE)
Sey518$y19_f = factor(Sey518$y19_f, levels = c("Low", "MidLow", "MidHigh", "High"), ordered = TRUE)
  1. 修正流动变量的创建逻辑
    你之前用m107和y19判断流动,但实际分类变量是m107_f和y19_f,需替换为正确的变量:
Sey518$upward = ifelse(Sey518$m107_f < Sey518$y19_f, 1, 0)
Sey518$downward = ifelse(Sey518$m107_f > Sey518$y19_f, 1, 0)
  1. 正确设置delta参数
    Dref的delta参数需要接收公式形式的输入(以~开头),而非直接写变量相加,这样gnm才能在数据环境中正确识别变量:
# 修正后的Model 2
drm_SDNN_mob = gnm(R_SDNN ~ Dref(m107_f, y19_f, delta = ~ downward + upward), family = gaussian, data = Sey518)

内容的提问来源于stack exchange,提问作者OBach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:01:25