参考了Fit模型,该模型使用每个预测器列单独地将结果存储在dataframe中,其中一个dataframe由一列响应变量和几列预测器变量组成。作者希望分别使用每个预测变量来拟合响应变量的模型,最后创建一个包含模型系数的数据框。在我感兴趣的原始问题下面有一个答案https://stackoverflow.com/a/43959567/14435732(复制如下)。
require(tibble)
require(dplyr)
require(tidyr)
require(purrr)
require(broom)
df <- iris
response_var <- "Sepal.Length"
vars <- tibble(response=response_var,
predictor=setdiff(names(df), response_var))
compose_formula <- function(x, y)
as.formula(paste0("~lm(", y, "~", x, ", data=.)"))
models <- tibble(data=list(df)) %>%
crossing(vars) %>%
mutate(fmla = map2(predictor, response, compose_formula),
model = map2(data, fmla, ~at_depth(.x, 0, .y)))
models %>% unnest(map(model, tidy))
有没有一种方法可以像下面这样得到一个理想的输出?(复制自https://stackoverflow.com/A/43959567/14435732)
# A tibble: 9 x 7
response predictor term estimate std.error statistic
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 Sepal.Length Sepal.Width (Intercept) 6.5262226 0.47889634 13.627631
2 Sepal.Length Sepal.Width Sepal.Width -0.2233611 0.15508093 -1.440287
3 Sepal.Length Petal.Length (Intercept) 4.3066034 0.07838896 54.938900
4 Sepal.Length Petal.Length Petal.Length 0.4089223 0.01889134 21.646019
5 Sepal.Length Petal.Width (Intercept) 4.7776294 0.07293476 65.505517
6 Sepal.Length Petal.Width Petal.Width 0.8885803 0.05137355 17.296454
7 Sepal.Length Species (Intercept) 5.0060000 0.07280222 68.761639
8 Sepal.Length Species Speciesversicolor 0.9300000 0.10295789 9.032819
9 Sepal.Length Species Speciesvirginica 1.5820000 0.10295789 15.365506
# ... with 1 more variables: p.value <dbl>
您可以使用多响应线性模型,其中每个响应都针对每个预测器分别进行回归,例如:
lm(cbind(Sepal.Length,Sepal.Width) ~ Species,data=iris)
Call:
lm(formula = cbind(Sepal.Length, Sepal.Width) ~ Species, data = iris)
Coefficients:
Sepal.Length Sepal.Width
(Intercept) 5.006 3.428
Speciesversicolor 0.930 -0.658
Speciesvirginica 1.582 -0.454
你会得到两组预测器,tidy在这方面做得很好:
tidy(lm(cbind(Sepal.Length,Sepal.Width) ~ Species,data=iris))
# A tibble: 6 x 6
response term estimate std.error statistic p.value
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 Sepal.Length (Intercept) 5.01 0.0728 68.8 1.13e-113
2 Sepal.Length Speciesversicolor 0.93 0.103 9.03 8.77e- 16
3 Sepal.Length Speciesvirginica 1.58 0.103 15.4 2.21e- 32
4 Sepal.Width (Intercept) 3.43 0.0480 71.4 5.71e-116
5 Sepal.Width Speciesversicolor -0.658 0.0679 -9.69 1.83e- 17
6 Sepal.Width Speciesvirginica -0.454 0.0679 -6.68 4.54e- 10
现在我们只需要重复上面的操作,改变RHS上的公式,所以我们可以使用Repemature来做到这一点,例如:
reformulate(termlabels="Species",response="cbind(Sepal.Length,Sepal.Width)")
cbind(Sepal.Length, Sepal.Width) ~ Species
library(purrr)
library(dplyr)
tidyMLM = function(iv,dat){
f = reformulate(termlabels=iv,
response="cbind(Sepal.Length,Sepal.Width)")
tidy(lm(f,data=dat)) %>% mutate(predictor=iv,.after=response)
}
predictors = setdiff(colnames(iris),c("Sepal.Length","Sepal.Width"))
map_dfr(predictors,tidyMLM,dat=iris)
# A tibble: 14 x 7
response predictor term estimate std.error statistic p.value
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 Sepal.Leng… Petal.Length (Intercept) 4.31 0.0784 54.9 2.43e-100
2 Sepal.Leng… Petal.Length Petal.Length 0.409 0.0189 21.6 1.04e- 47
3 Sepal.Width Petal.Length (Intercept) 3.45 0.0761 45.4 9.02e- 89
4 Sepal.Width Petal.Length Petal.Length -0.106 0.0183 -5.77 4.51e- 8
5 Sepal.Leng… Petal.Width (Intercept) 4.78 0.0729 65.5 3.34e-111
6 Sepal.Leng… Petal.Width Petal.Width 0.889 0.0514 17.3 2.33e- 37
7 Sepal.Width Petal.Width (Intercept) 3.31 0.0621 53.3 1.84e- 98
8 Sepal.Width Petal.Width Petal.Width -0.209 0.0437 -4.79 4.07e- 6
9 Sepal.Leng… Species (Intercept) 5.01 0.0728 68.8 1.13e-113
10 Sepal.Leng… Species Speciesversi… 0.93 0.103 9.03 8.77e- 16
11 Sepal.Leng… Species Speciesvirgi… 1.58 0.103 15.4 2.21e- 32
12 Sepal.Width Species (Intercept) 3.43 0.0480 71.4 5.71e-116
13 Sepal.Width Species Speciesversi… -0.658 0.0679 -9.69 1.83e- 17
14 Sepal.Width Species Speciesvirgi… -0.454 0.0679 -6.68 4.54e- 10
如果你有80个反应,120个预测:
df = data.frame(matrix(rnorm(100*200),ncol=200))
colnames(df) = c(paste0("r",1:80),paste0("p",1:120))
responses = as.matrix(df[,grep("r",colnames(df))])
predictors = grep("p",colnames(df),value=TRUE)
tidyMLM = function(iv,dat){
f = reformulate(termlabels=iv,
response="responses")
tidy(lm(f,data=dat)) %>% mutate(predictor=iv,.after=response)
}
map_dfr(predictors,tidyMLM,dat=df)
# A tibble: 19,200 x 7
response predictor term estimate std.error statistic p.value
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 r1 p1 (Intercept) -0.0959 0.0882 -1.09 0.280
2 r1 p1 p1 0.0217 0.0879 0.247 0.806
3 r2 p1 (Intercept) -0.0174 0.101 -0.172 0.864
4 r2 p1 p1 -0.186 0.101 -1.84 0.0685
5 r3 p1 (Intercept) 0.0214 0.0947 0.226 0.822
6 r3 p1 p1 0.0651 0.0944 0.690 0.492
7 r4 p1 (Intercept) 0.0708 0.103 0.686 0.495
8 r4 p1 p1 -0.142 0.103 -1.38 0.169
9 r5 p1 (Intercept) 0.134 0.101 1.33 0.186
10 r5 p1 p1 0.0248 0.100 0.247 0.805
# … with 19,190 more rows
我希望现在这说得通了。
我想知道是否有可能将不同流中的数据合并成一个流。通过合并,我的意思是将其添加到单独的列中,而不是添加到现有的列中。 到目前为止,我已经能够将数据收集到单独的地图中,如下面的示例所示。我认为我应该把这些地图合并成一张,但不确定如何去做,或者我是否做错了什么。 我做了一些搜索,在FlatMap、Concat等网站上找到了一些线索,但因为我对这条流还不熟悉 例如:列出数据-1
问题内容: 我正在尝试整理我的第一个数据驱动测试框架,该框架通过Selenium Grid / WebDriver在多个浏览器上运行测试。现在,我在自己的类中拥有每个测试用例,并且对浏览器进行了参数设置,因此它在每个浏览器中都运行一次每个测试用例。 在大型测试框架上常见吗?还是应该将每个测试用例复制并微调到其各自类中的每个浏览器?因此,如果我正在测试chrome,firefox和IE,是否应该为每
问题内容: 在此先感谢您的帮助。 好吧,这就是我的情况。我有一个Web系统,该系统基于超声波计创建的样本进行一些与噪声相关的计算。最初,数据库仅存储这些计算的结果。但是现在,我被要求也自己存储样本。每个样本只是一个300或600个数字的列表,每个数字都有一个小数。 因此,我想到的最简单的方法是在表中添加一列,该列存储给定样本的所有计算。此列应包含数字列表。 那么我的问题是:将这一数字列表存储在单列
我有一个禁用聚合图监听器的脚本。我在非GUI模式下运行测试。 bat-t test.jmx-l result.jtl 运行脚本后,我在聚合图形侦听器中打开结果文件,并能够查看图形。现在我需要在脚本中添加更多的图形侦听器。如何在非GUI模式下为侦听器获得单独的结果文件(为了优化脚本,所有侦听器都被禁用)。 我可以在聚合图侦听器中打开结果文件。但是当我在响应时间图中打开相同的文件时,我得到的消息是-
问题内容: 我正在使用pyspark,使用spark- csv将大的csv文件加载到数据帧中,并且作为预处理步骤,我需要对其中一列(包含json字符串)中的可用数据进行多种操作。这将返回X值,每个值都需要存储在自己的单独列中。 该功能将在UDF中实现。但是,我不确定如何从该UDF返回值列表并将其馈送到各个列中。下面是一个简单的示例: 产生以下内容: 将udf返回的两个(在此示例中)值存储在单独的列
问题内容: 我需要使用具有多个索引的大型数据框,因此我尝试创建一个数据框以了解如何将其存储在hdf5文件中。数据框是这样的:(在前2列中有multi索引) 我正在使用pandas.to_hdf,但在尝试选择组中的数据时会创建“固定格式存储”: 它返回一些错误,主要问题是 然后我试图像这样追加DataFrame: 那应该创建一个表,但这给了我另一个错误: 所以我需要的代码将数据帧存储在一个表中HDF