- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我引用这篇文章http://r.789695.n4.nabble.com/Questions-about-biglm-td878929.html其中讨论了如何使用biglm获取VIF。
是否有其他方法可以从 biglm 生成的对象中获取 VIF?
感谢您的帮助
最佳答案
对于简单模型,按照 car 包中 "lm"
对象的 vif()
方法中的代码相对容易,正如 John Fox 在您链接到的 R-Help 线程中建议的那样。您不能直接使用 car 包,因为它使用模型矩阵,而使用 biglm()
则无法实现这一点。为了说明如何执行此操作,请考虑 ?biglm
require(biglm)
data(trees)
ff <- log(Volume) ~ log(Girth) + log(Height)
chunk1<-trees[1:10,]
chunk2<-trees[11:20,]
chunk3<-trees[21:31,]
a <- biglm(ff,chunk1)
a <- update(a,chunk2)
a <- update(a,chunk3)
拟合模型位于a
中,我们从中提取参数的方差-协方差矩阵,去掉截距,计算相关矩阵R
及其行列式:
v <- vcov(a)
## drop intercept
v <- v[-1, -1, drop = FALSE]
R <- cov2cor(v)
detR <- det(R)
接下来,准备一些东西来容纳 VIF
res <- numeric(length = ncol(v))
names(res) <- colnames(v)
最后,循环模型项(减去截距)并计算每个项的 VIF
for(i in seq_len(ncol(v))) {
res[i] <- det(R[i, i, drop = FALSE]) * det(R[-i, -i, drop = FALSE]) / detR
}
这会导致:
> res
log(Girth) log(Height)
1.391027 1.391027
如果我们加载 car 包并使用它来计算使用 lm()
拟合的同一模型的 VIF,我们可以看到它给出了相同的输出
> require(car)
> mod <- lm(ff, data = trees)
> vif(mod)
log(Girth) log(Height)
1.391027 1.391027
vif()
看起来比我展示的代码更聪明一点,因为如果模型项包含在更多系数中,而不仅仅是我的代码假设的一个主效应,那么它就会计算出来。在这种情况下,模型协变量将包含在方差-协方差矩阵 v
的多列/行中,并且在计算模型中的行列式时,您需要保留/排除包含该项的所有行/列。 for()
循环。您可以从方差-协方差矩阵中计算出来,但您也可以自己计算出来。
测试时,使用 biglm()
和 lm()
将您的模型拟合到一小部分随机数据样本,并使用 计算 VIF car 的 vif()
作用于生成的 "lm"
对象,并手 Action 用于 "biglm"
对象并检查它们同意。
关于r - 如何使用biglm包获取VIF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6994675/
我在 R 中使用一些 big.___() 包处理一个大型数据集。它约为 10 gig (100mmR x 15C),如下所示: Price Var1 Var2 12.4
我尝试在大型数据集上运行多个线性回归。基本上 biglm 工作正常。现在我尝试找到一种方便的方法来自动创建我的公式,使用一个向量,包含我的因变量和一个字符串,包含我的公式的其余部分。两个字符串一起是我
如何从biglm对象中提取公式?我已经尝试过函数 as.formula(),但它没有返回我期望的结果。示例: m1 = lm(Fertility ~ Agriculture + Examination
如何从 biglm 对象中提取公式?我已经尝试过 as.formula() 函数,但它没有返回我期望的结果。示例: m1 = lm(Fertility ~ Agriculture + Examinat
我正在处理包含超过 2^31 个观察值的大量数据。实际观测次数接近 35 亿次。 我正在使用 R 包“biglm”来运行具有大约 70 个预测变量的回归。我一次读入一百万行数据并更新回归结果。数据已使
我正在逐块运行大型数据集,并在使用 biglm 函数时更新线性模型列表。当特定块不包含我在线性模型中的所有因素时会出现问题,并且出现此错误: Error in update.biglm(model,
我一直在尝试使用 biglm 在大型数据集(约 60,000,000 行)上运行线性回归。我想使用 AIC 进行模型选择。但是我发现在较小的数据集上使用 biglm 时,biglm 返回的 AIC 变
我正在尝试从 biglm 中使用的 QR 分解中恢复 R 矩阵。为此,我使用了 vcov.biglm 中的一部分代码并将其放入如下函数中: qr.R.biglm col(R)] col(R)] <
我用过biglm在 R 中,发现它非常有用。现在我需要 python 中的相同类型的功能。有任何想法吗?我已经看到 patsy/statsmodels 有一个增量模式,但没能找到任何样本来复制/改编。
我是一名优秀的程序员,十分优秀!