gpt4 book ai didi

r - 在应用函数之前从lm-object中提取数据的方法?

转载 作者:行者123 更新时间:2023-12-04 11:06:39 25 4
gpt4 key购买 nike

让我直接深入一个例子来说明我的问题:

 rm(list=ls())
n <- 100
df <- data.frame(y=rnorm(n), x1=rnorm(n), x2=rnorm(n) )
fm <- lm(y ~ x1 + poly(x2, 2), data=df)

现在,我想看看以前使用的数据。这几乎可以通过使用
 temp.data <- fm$model

然而, x2将被拆分为 poly(x2,2) ,它本身就是一个数据帧,因为它包含 x2 的值和 x2^2 .请注意,它看起来好像 x2包含在此处,但由于多项式使用正交分量, temp.data$x2df$x2 不一样.如果您在以下情况下直观地比较变量,也可以看到这一点: new.dat <- cbind(df, fm$model) .

现在,回答一些问题:

首先,也是最重要的是,有没有办法检索 x2来自原始形式的 lm-object。或者更一般地说,如果某个函数 f已应用于 lm-formula 中的某些变量,是否可以从 lm-object 中提取底层变量(无需进行特定于案例的数学运算)?请注意,我知道我可以通过其他方式检索数据,但我想知道是否可以从 lm-object 本身中提取它。

其次,更一般地说,因为我没有明确要求 model.matrix(fm) ,为什么我得到的数据被操纵了?这背后的基本哲学是什么?有人知道吗?

三、命令 head(new.dat)告诉我 x2已被拆分为两个组件。我输入 View(new.dat) 时看到的内容然而,只有一列。这让我感到困惑和难以置信。两列如何表示为一个,为什么 head有区别和 View ?如果有人能解释一下,我将感激不尽!

如果这些问题过于基础,请见谅。在这种情况下,我将不胜感激任何指向相关手册的说明。

提前致谢!

最佳答案

好问题,但这很难。 fm$model是一个奇怪的数据框,它的类型对于用户来说很难构建,但 R 有时会在内部生成。查看 str(fm$model) 的前几行,这表明它是一个数据框,它的第三个组件是一个尺寸为 (100,2) 的类 poly 的对象——即类似于矩阵的东西:

## 'data.frame':    100 obs. of  3 variables:
## $ y : num -0.5952 -1.9561 1.8467 -0.2782 -0.0278 ...
## $ x1 : num 0.423 -1.539 -0.694 0.254 -0.13 ...
## $ poly(x2, 2): poly [1:100, 1:2] 0.0606 -0.0872 0.0799 -0.1068 -0.0395 ...

您仍然在 lm 的环境中工作首先被调用,如果 lm使用 data 调用参数,您可以使用 eval(getCall(fm)$data)获取原始数据。如果东西被传入和传出函数,或者如果有人使用 lm在环境中的独立对象上,您可能不走运。如果遇到麻烦可以尝试
eval(getCall(fm)$data,environment(formula(fm))

但事情很快开始变得越来越困难。

我不完全理解存储处理后的模型框架而不是原始数据的逻辑,但我认为这与 terms的构建有关。线性模型的对象——存储的模型框架中的每个元素对应于 terms 的一个元素目的。我真的不明白因素之间的区别 - 由 model.matrix 后处理成多组虚拟变量列 - 和转换数据(例如 log(x) )或特殊对象,如多项式或样条基...

关于r - 在应用函数之前从lm-object中提取数据的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22921765/

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