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

如何从nlme包的系统发育控制PGLS ANOVA获取各变量效应量?

从nlme的PGLS ANOVA获取效应量的方法

nlme包的anova.gls()确实不会直接输出平方和或效应量指标,以下是几种可行的解决方法:

1. 手动计算边际R²

PGLS的R²需要基于加权平方和计算(因为广义最小二乘引入了系统发育相关权重),步骤如下:

# 提取模型响应变量与权重矩阵
y <- pgls.model$model[[all.vars(pgls.model$terms)[1]]]
V <- getVarCov(pgls.model)

# 计算加权总平方和
y_mean <- mean(y)
WSS_total <- t(y - y_mean) %*% solve(V) %*% (y - y_mean)

# 计算加权残差平方和
resid <- residuals(pgls.model, type = "response")
WSS_resid <- t(resid) %*% solve(V) %*% resid

# 计算边际R²(仅固定效应解释的变异比例)
pgls_r2 <- 1 - (WSS_resid / WSS_total)
cat("PGLS 边际R²:", round(as.numeric(pgls_r2), 3), "\n")

2. 使用MuMIn包快速计算R²

MuMIn包的r.squaredGLMM()函数支持gls模型,可直接输出边际R²:

library(MuMIn)

# 计算R²
r2_results <- r.squaredGLMM(pgls.model)
print(r2_results)

输出中的R2m为边际R²(仅固定效应贡献),由于gls模型无随机效应,R2c会与R2m一致。

3. 计算Eta²与Cohen's f

这两个指标需要通过嵌套模型对比,计算单个变量的加权平方和贡献:

# 复用方法1中的总加权平方和WSS_total

# 拟合不含Lnalt的嵌套模型
pgls_no_lnalt <- gls(Lnote ~ wing, data = Barbet, correlation = corPagel(value = 1, form = ~ species, phy = Tree))
# Lnalt的加权平方和
WSS_lnalt <- t(residuals(pgls_no_lnalt)) %*% solve(getVarCov(pgls_no_lnalt)) %*% residuals(pgls_no_lnalt) - WSS_resid
# Lnalt的Eta²与Cohen's f
eta2_lnalt <- WSS_lnalt / WSS_total
f_lnalt <- sqrt(eta2_lnalt / (1 - eta2_lnalt))

# 同理计算wing的效应量
pgls_no_wing <- gls(Lnote ~ Lnalt, data = Barbet, correlation = corPagel(value = 1, form = ~ species, phy = Tree))
WSS_wing <- t(residuals(pgls_no_wing)) %*% solve(getVarCov(pgls_no_wing)) %*% residuals(pgls_no_wing) - WSS_resid
eta2_wing <- WSS_wing / WSS_total
f_wing <- sqrt(eta2_wing / (1 - eta2_wing))

# 输出结果
cat("Lnalt的Eta²:", round(as.numeric(eta2_lnalt), 3), "\n")
cat("Lnalt的Cohen's f:", round(as.numeric(f_lnalt), 3), "\n")
cat("wing的Eta²:", round(as.numeric(eta2_wing), 3), "\n")
cat("wing的Cohen's f:", round(as.numeric(f_wing), 3), "\n")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:03:21