Closed. This question needs debugging details。它当前不接受答案。
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
2年前关闭。
Improve this question
我有一个包含3,000多个行和10多个变量的表。我正在尝试使用一个变量作为预测变量,将另一个变量作为对300个不同组的响应进行线性回归。对于每个回归,我都需要斜率,p值和r平方。单独进行每个回归并记录摘要变量将花费数小时甚至数天。
我已经使用以下程序包获取每个组的截距和斜率,但是我不知道如何为每个组也获取相应的p值和r平方:
我在下面实现了一个列表示例,其中“Adams#”是id值。之所以存在NA,是因为并非所有组都有多个要绘制和比较的点:
但是,此表不包括任何重要度统计信息。我仍然需要p值和r平方统计量。如果有一个代码可以一次完成所有组值,或者有一个代码仅提取其余值,那将很有帮助。
有没有办法对所有组的斜率输出求幂?我的结果被对数转换。
谢谢你们!!
如果我们想为每个组建立一个回归模型,研究IQ得分和时间点之间的关系,我们只需要五行代码。
哪个会回来
其中
要获得斜率,您还需要调用
要对斜率求幂,可以只添加另一个
请注意,估计值已取幂。如果没有幂运算,则可以使用
如果您使用更复杂的模型(
对于
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
2年前关闭。
Improve this question
我有一个包含3,000多个行和10多个变量的表。我正在尝试使用一个变量作为预测变量,将另一个变量作为对300个不同组的响应进行线性回归。对于每个回归,我都需要斜率,p值和r平方。单独进行每个回归并记录摘要变量将花费数小时甚至数天。
我已经使用以下程序包获取每个组的截距和斜率,但是我不知道如何为每个组也获取相应的p值和r平方:
library(lme4)
groupreg<-lmList(logpop ~ avgp | id, data=data)
groupreg
我在下面实现了一个列表示例,其中“Adams#”是id值。之所以存在NA,是因为并非所有组都有多个要绘制和比较的点:
Coefficients:
(Intercept) avgp
Adams 6 4.0073332 NA
Adams 7 6.5177389 -7.342443e+00
Adams 8 4.7449321 NA
Adams 9 NA NA
但是,此表不包括任何重要度统计信息。我仍然需要p值和r平方统计量。如果有一个代码可以一次完成所有组值,或者有一个代码仅提取其余值,那将很有帮助。
有没有办法对所有组的斜率输出求幂?我的结果被对数转换。
谢谢你们!!
最佳答案
我认为最简单的答案仍然缺失。您可以结合使用嵌套和映射。我将向您展示它如何用于线性回归。我认为您可以将相同的原理应用于lme4
包的模型。
让我们创建一个玩具数据集,其中我们在两个不同的时间点测量了三个不同组的智商得分。
library(tidyverse)
library(broom)
df <- tibble(
id = seq_len(90),
IQ = rnorm(90, 100, 15),
group = rep(c("A", "B", "C"), each = 30),
time = rep(c("T1", "T2"), 45)
)
如果我们想为每个组建立一个回归模型,研究IQ得分和时间点之间的关系,我们只需要五行代码。
df %>%
nest(-group) %>%
mutate(fit = map(data, ~ lm(IQ ~ time, data = .)),
results = map(fit, glance)) %>%
unnest(results) %>%
select(group, r.squared, p.value)
哪个会回来
# A tibble: 3 x 3
group r.squared p.value
<chr> <dbl> <dbl>
1 A 0.0141 0.532
2 B 0.0681 0.164
3 C 0.00432 0.730
其中
nest(-group)
在您的tibbles
中为每个组创建tibble
,其中包含id
,IQ
和time
的相应变量。然后,添加一个带有fit
的新列mutate()
,在其中为每个组应用一个回归模型,并添加一个包含结果的新列,我们在不久之后使用unnest()
访问了正确返回的值glance()
。在最后一步中,我们对三个感兴趣的值进行select()
。要获得斜率,您还需要调用
tidy()
。也许可以以某种方式缩短代码,但是一种解决方案是df %>%
nest(-group) %>%
mutate(fit = map(data, ~ lm(IQ ~ time, data = .)),
results1 = map(fit, glance),
results2 = map(fit, tidy)) %>%
unnest(results1) %>%
unnest(results2) %>%
select(group, term, estimate, r.squared, p.value) %>%
mutate(estimate = exp(estimate))
要对斜率求幂,可以只添加另一个
mutate()
语句。最后它返回# A tibble: 6 x 5
group term estimate r.squared p.value
<chr> <chr> <dbl> <dbl> <dbl>
1 A (Intercept) 3.34e+46 0.0141 0.532
2 A timeT2 3.31e- 2 0.0141 0.532
3 B (Intercept) 1.17e+47 0.0681 0.164
4 B timeT2 1.34e- 3 0.0681 0.164
5 C (Intercept) 8.68e+43 0.00432 0.730
6 C timeT2 1.25e- 1 0.00432 0.730
请注意,估计值已取幂。如果没有幂运算,则可以使用
base R
调用再次检查斜率和p值summary(lm(IQ ~ time, data = filter(df, group == "A")))
如果您使用更复杂的模型(
lme4
),则有一个名为lmerTest的软件包,该软件包提供lme4
的包装函数,这些函数返回p值(至少对于我已经使用过的混合模型)。对于
glance()
模型使用lme4
时应多加警告,因为broom
软件包的维护者将尝试new concept,在此他们将摘要统计信息外包给负责该模型的特定软件包开发人员。关于r - R中按组运行的数百种线性回归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51567914/
10-13 07:29