如何在R语言的glm函数中将预测变量偏移一行?
直接在GLM模型中调用前一小时观测数据的方法
你可以用dplyr包的lag()函数,直接在模型公式里生成前一小时的物种观测值,不用手动新增列。具体实现如下:
首先确保安装并加载dplyr包:
install.packages("dplyr") # 首次使用需安装 library(dplyr)
然后修改你的GLM模型公式,对需要滞后的变量(Elephant、Lion)使用lag()函数,再进行标准化:
giraffe_glm.fit <- glm( giraffe ~ scale(lag(Elephant)) + scale(Hour) + scale(lag(Lion)), data = data_num, family = binomial )
原理说明
lag(Elephant)会自动提取每个观测的前一行Elephant值,正好对应你需要的“前一小时数据”:比如Hour1的Giraffe会匹配Hour0的Elephant,Hour2匹配Hour1的Elephant,以此类推。- 第一行(Hour0)没有前一行数据,
lag()会生成NA,GLM运行时会自动剔除这一行含缺失值的观测,不影响后续有效数据的建模。
不用dplyr的替代方案
如果你不想加载额外包,可以用基础R的语法手动构造滞后序列,原理是取变量除最后一行外的所有值,前面补NA:
giraffe_glm.fit <- glm( giraffe ~ scale(c(NA, head(Elephant, -1))) + scale(Hour) + scale(c(NA, head(Lion, -1))), data = data_num, family = binomial )
这种写法效果和lag()完全一致,但变量多的时候代码会比较繁琐,更推荐用dplyr::lag()。
内容的提问来源于stack exchange,提问作者Rebecka
相关产品推荐
相关产品推荐

