gpt4 book ai didi

r - 比较 R 中两个不同线性模型的系数

转载 作者:行者123 更新时间:2023-12-02 02:59:05 26 4
gpt4 key购买 nike

我目前正在使用一种变量选择技术,该技术要求我确定任何给定变量的系数在具有不同变量组合的模型之间的变化是否超过 20%。我试过:

abs(model1$coefficients - model2$coefficients)/model1$coefficients

但是向量的长度不一样(因为每个模型中有不同的变量)所以它们没有正确排列。有没有一种方法可以跨模型比较具有相同变量名称的系数?我可以手动完成此操作,但有 50 多个系数和 10 个模型,因此需要很长时间。

抱歉,如果这是显而易见的,但我无法弄清楚。我四处寻找答案以指明正确的方向,但所有这些都与系数的统计比较有关,并且不包括帮助我解决此问题的代码。

最佳答案

你没有提供任何样本数据,所以我将根据模型y = a + b * x1 + c * x2 + e模拟数据,其中e ~ N (0, 1)

然后我拟合两个模型:y ~ x1y ~ x1 + x2 并使用自定义函数 getEstimates 提取参数来自两个模型的相同预测变量。使用方差分析评估其他预测变量的重要性也是一个好主意。

# Simulate some data
set.seed(2017);
generateData <- function(a = 1, b = 2, c = -2, nPoints = 1000) {
x1 <- runif(nPoints);
x2 <- runif(nPoints);
y <- a + b * x1 + c * x2 + rnorm(nPoints);
return(data.frame(y = y, x1 = x1, x2 = x2));
}
df <- generateData();


# Fit1: y ~ a + b * x1
fit1 <- lm(y ~ x1, data = df);

# Fit2: y ~ a + b * x1 + c * x2
fit2 <- lm(y ~ x1 + x2, data = df);

# ANOVA to explore importance of variable
anova(fit1, fit2);
#Analysis of Variance Table
#
#Model 1: y ~ x1
#Model 2: y ~ x1 + x2
# Res.Df RSS Df Sum of Sq F Pr(>F)
#1 998 1292.20
#2 997 994.46 1 297.74 298.5 < 2.2e-16 ***
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

# Function to get estimates for parameter(s) par
# from two models fit1 and fit2
getEstimates <- function(par, fit1, fit2) {
lst <- lapply(par, function(x)
c(summary(fit1)$coef[x, 1], summary(fit2)$coef[x, 1]));
names(lst) <- par;
return(lst);
}

# Get coefficient for predictor x1
est <- getEstimates("x1", fit1, fit2);

根据 getEstimates 的输出,您可以计算两个模型之间参数的相对变化。

# Calculate relative change in estimated x1 coefficient from both models
lapply(est, function(x) abs(x[1] - x[2])/x[1]);
#$x1
#[1] 0.0282493

关于r - 比较 R 中两个不同线性模型的系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47566145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com