占用分析中backTransform函数系数设置问题求助
我正在进行占用分析,使用backTransform函数估计通用的p(检测概率)和psi(占用概率),最终模型输出如下:
Occupancy: Estimate SE z P(>|z|) (Intercept) -0.391 0.554 -0.706 0.480 dist_water -0.931 0.571 -1.632 0.103 Detection: Estimate SE z P(>|z|) dist_road 0.67 0.218 3.08 0.00208 trigger_speedfast -1.12 0.372 -3.01 0.00260 trigger_speedslow -3.47 1.152 -3.01 0.00260 AIC: 131.4012
我希望用backTransform估计通用的p和psi,但不理解该函数如何处理检测模型中的trigger_speedfast和trigger_speedslow这两个因子变量,也不清楚coefficients参数的工作逻辑。当前运行的代码及输出如下:
backTransform(linearComb(p1,coefficients = c(1,1,0), type="det")) Estimate SE LinComb dist_road trigger_speedfast trigger_speedslow 0.389 0.0889 -0.451 1 1 0
我不希望R自动将trigger_speedfast设为1、trigger_speedslow设为0,需要指导如何为变量设置正确的值。
解决方案
首先明确:trigger_speedfast和trigger_speedslow是采用虚拟编码的因子变量,模型中未显示的类别是基准水平(比如默认的第一个类别,如trigger_speedmedium)。linearComb的coefficients参数严格对应模型检测部分的系数顺序:截距项 → dist_road → trigger_speedfast → trigger_speedslow。
coefficients参数的每个元素含义:
- 第一个值固定为
1,表示保留模型的截距项 - 第二个值对应
dist_road的目标取值(可以是0、均值或你需要的任意实际值) - 第三个值对应
trigger_speedfast的取值:1代表选中该类别,0代表不选中 - 第四个值对应
trigger_speedslow的取值:1代表选中该类别,0代表不选中
常见场景的代码示例:
计算基准速度类别(非fast/slow)的检测概率:
将两个因子变量都设为0,同时指定dist_road的目标值(比如设为0):backTransform(linearComb(p1, coefficients = c(1, 0, 0, 0), type="det"))计算
trigger_speedslow类别的检测概率:
设置trigger_speedslow=1,trigger_speedfast=0,并填入dist_road的目标值(比如用变量均值,假设均值为1.8):backTransform(linearComb(p1, coefficients = c(1, 1.8, 0, 1), type="det"))自定义所有变量取值:
按系数顺序直接赋值即可,比如dist_road=1,选择基准速度类别:backTransform(linearComb(p1, coefficients = c(1, 1, 0, 0), type="det"))
核心注意点:
- 同一时间只能有一个因子虚拟变量设为1,其余设为0;基准类别则所有虚拟变量都设为0。
coefficients的长度必须和检测模型的系数总数一致(这里是4个:截距+3个自变量),不要漏填。
内容的提问来源于stack exchange,提问作者Edoardo

