相关疑难解决方法(0)

在R中的data.table环境中创建一个公式

我想在一个内部进行回归data.table.的formula要被动态构造的需求.我尝试了以下方法:

x = data.table(a=1:20, b=20:1, id=1:5)
> x[,as.list(coef(lm(as.formula("a ~ b")))),by=id]
  Error in eval(expr, envir, enclos) : object 'a' not found
Run Code Online (Sandbox Code Playgroud)

如何将环境指定为进行评估的实际data.table的环境?

编辑:我意识到我可以做lm(a~b).我需要公式是动态的,所以它被构建为一个字符串.通过动态我的意思是公式可以在paste0(var_1, "~", var_2)哪里var_1 = avar_2 = b

这是一个解决方案,我认为我们可以做得更好:

txt = parse(text="as.list(coef(lm(a ~ b)))")
> x[,eval(txt),by=id]
  id (Intercept)  b
  1:  1          21 -1
  2:  2          21 -1
  3:  3          21 -1
  4:  4          21 -1
  5:  5          21 -1
Run Code Online (Sandbox Code Playgroud)

environment r data.table

19
推荐指数
1
解决办法
1649
查看次数

为什么在分组data.table中使用lm更新丢失其模型数据?

好的,这是一个奇怪的.我怀疑这是一个内部的错误data.table,但是如果有人能够解释为什么会发生这种情况会有用 - 这究竟是update做什么的?

我正在使用list(list())里面的技巧data.table存储适合的模型.当您lm为不同的分组创建一系列对象,然后创建update这些模型时,所有模型的模型数据将成为最后一个分组的模型数据.这似乎是一个参考是挂在应该已经制作副本的地方,但我找不到哪里,我无法重现这个lmupdate.

具体例子:

从虹膜数据开始,首先使三种不同的样本大小,然后将lm模型拟合到每个物种,更新那些模型:

set.seed(3)
DT = data.table(iris)
DT = DT[rnorm(150) < 0.9]
fit = DT[, list(list(lm(Sepal.Length ~ Sepal.Width + Petal.Length))),
          by = Species]
fit2 = fit[, list(list(update(V1[[1]], ~.-Sepal.Length))), by = Species]
Run Code Online (Sandbox Code Playgroud)

原始数据表具有不同数量的每个物种

DT[,.N, by = Species]
#       Species  N
# 1:     setosa 41
# 2: versicolor 39
# 3:  virginica 42
Run Code Online (Sandbox Code Playgroud)

第一次证实了这一点:

fit[, nobs(V1[[1]]), by = Species]
#       Species …
Run Code Online (Sandbox Code Playgroud)

r lm data.table

11
推荐指数
1
解决办法
640
查看次数

R可变长度在构建残差线性模型时不同

我正在研究一个问题,我想用其他两个线性模型的残差来构建线性模型.我使用UN3数据集来显示我的问题,因为这里的问题比使用我的实际数据集容易.

这是我的R代码:

head(UN3)
m1.lgFert.purban <- lm(log(Fertility) ~ Purban, data=UN3)
m2.lgPPgdp.purban <- lm(log(PPgdp) ~ Purban,  data=UN3)
m3 <- lm(residuals(m1.lgFert.purban) ~ residuals(m2.lgPPgdp.purban))
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

> m3 <- lm(residuals(m1.lgFert.purban) ~ residuals(m2.lgPPgdp.purban))
Error in model.frame.default(formula = residuals(m1.lgFert.purban) ~ residuals(m2.lgPPgdp.purban),  : 
  variable lengths differ (found for 'residuals(m2.lgPPgdp.purban)')
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么会发生这个错误.如果它是与日志相关的问题,那么当我构建前两个模型时,我应该得到错误.

r linear-regression lm

1
推荐指数
1
解决办法
2万
查看次数

标签 统计

r ×3

data.table ×2

lm ×2

environment ×1

linear-regression ×1