繁体   English   中英

Lapply的稳健线性回归

[英]robust linear regression with lapply

我在数据框列表上运行健壮的线性回归模型(使用MASS库中的rlm)时遇到问题。

可重现的示例:

var1 <- c(1:100)
var2 <- var1*var1
df1  <- data.frame(var1, var2)
var1 <- var1 + 50
var2 <- var2*2
df2  <- data.frame(var1, var2)
lst1 <- list(df1, df2)

线性模型(有效):

lin_mod <- lapply(lst1, lm, formula = var1 ~ var2)
summary(lin_mod[[1]])

我的健壮模型代码:

rob_mod <- lapply(lst1, MASS::rlm, formula = var1 ~ var2)

给出以下错误:

Error in rlm.default(X[[i]], ...) : 
argument "y" is missing, with no default

我该如何解决?

我实际数据中的错误是:

Error in qr.default(x) : NA/NaN/Inf in foreign function call (arg 1)
In addition: Warning message:
In storage.mode(x) <- "double" : NAs introduced by coercion    

您也可以尝试使用purrr:map解决方案:

library(tidyverse)
map(lst1, ~rlm(var1 ~ var2, data=.))

或如乔兰评论

map(lst1, MASS:::rlm.formula, formula = var1 ~ var2)

如您在这里看到的, ?lm仅提供一种公式方法。 相反, ?rlm提供( formulax, y )。 因此,您必须指定data=rlm才能显式使用公式方法。 否则, rlm希望xy作为输入。

您的呼叫缺少data参数。 lapply将调用FUN作为第一个参数与所述列表中的每个成员FUNdata第二个参数来rlm

解决方案是定义一个匿名函数。

lin_mod <- lapply(lst1, function(DF) MASS::rlm(formula = var1 ~ var2, data = DF))
summary(lin_mod[[1]])
#
#Call: rlm(formula = var1 ~ var2, data = DF)
#Residuals:
#    Min      1Q  Median      3Q     Max 
#-18.707  -5.381   1.768   6.067   7.511 
#
#Coefficients:
#              Value   Std. Error t value
#(Intercept) 19.6977  1.0872    18.1179
#var2         0.0092  0.0002    38.2665
#
#Residual standard error: 8.827 on 98 degrees of freedom

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM