从 lm 函数获取分组数据的 p 值
Get the p-values from the lm function for grouped data
我正在尝试结合使用 lm()
函数和 plyr
包为我的数据中的每个段拟合模型,因为我的数据是按键分组的。
我已经设法 运行 模型并获得系数以及 R^2 和 adj r 平方,但我正在努力处理 p 值。
library("plyr")
#Sample data
test_data <- data.frame(key = c("a","a","a","a","a","b","b","b","b","b"),
y = c(100,180,120,60,140,200,220,240,260,280),
x1 = c(50,60,79,85,90,133,140,120,160,170),
x2 = c(20,18,47,16,15,25,30,25,20,15))
#model
model_1 <- dlply(test_data, .(key),
function(test_data) lm(y ~ x1 + x2,data = test_data))
#coefficients
ldply(model_1, coef)
#adj r-squared
ldply(model_1, function(x) summary(x)$r.squared)
我试过这个,它得到了键和 p 值,但它没有变量的名称,我需要这些变量的名称,以便稍后能够将输出与模型的系数合并。
#p-values but missing the variable names
ldply(model_1, function(x) summary(x)$coefficients)[,c(1,5)]
我尝试使用 Do
和 dplyr
包中的 tidy
来拟合模型,这适用于小数据集,因为它实际上 returns 我需要的一切,但我的实际数据包含超过 1,000 个不同的段,RStudio 最终崩溃。
不需要 plyr
我想 sapply
就可以了。
sapply(model_1, function(x) summary(x)$coefficients[, 4])
a b
(Intercept) 0.3699423 0.3013515
x1 0.7698867 0.7307786
x2 0.9764913 0.3814288
并且 t()
将获得与您的估计配置相同的配置。
顺便说一下,您可能想看看 multidplyr
包,毕竟是为了 tidy
和 dplyr::do
。
我正在使用 "dplyr" 包来格式化输出。在 "dlply" 函数内部使用的函数中,您应该对 lm() 使用 summary(),因此当您调用 "coef" 时,它还将包含 p.values.
test_data <- data.frame(key = c("a","a","a","a","a","b","b","b","b","b"),
y = c(100,180,120,60,140,200,220,240,260,280),
x1 = c(50,60,79,85,90,133,140,120,160,170),
x2 = c(20,18,47,16,15,25,30,25,20,15))
model<-by(test_data,test_data$key,function(x)summary(lm(y~x1+x2,x)))
R2<-t(data.frame(lapply(model,function(x)x$adj.r.squared)));colnames(R2)<-"R2_adj";R2
R2_adj
a -0.8939647
b 0.4292186
Co<-as.data.frame(t(data.frame(lapply(model,function(x)x$coef))))
colnames(Co)<-c("intercept","x1","x2")
library(dplyr)
Co%>%
mutate(key=substr(rownames(Co),1,1),
variable=substr(rownames(Co),3,12))%>%
select(key,variable,intercept,x1,x2)
key variable intercept x1 x2
1 a Estimate 162.1822438 -0.6037364 0.07628315
2 a Std..Error 141.3436897 1.8054132 2.29385395
3 a t.value 1.1474318 -0.3344035 0.03325545
4 a Pr...t.. 0.3699423 0.7698867 0.97649134
5 b Estimate 271.0532276 0.3624009 -3.62853907
6 b Std..Error 196.2769562 0.9166979 3.25911570
7 b t.value 1.3809733 0.3953330 -1.11335080
8 b Pr...t.. 0.3013515 0.7307786 0.38142882
我正在尝试结合使用 lm()
函数和 plyr
包为我的数据中的每个段拟合模型,因为我的数据是按键分组的。
我已经设法 运行 模型并获得系数以及 R^2 和 adj r 平方,但我正在努力处理 p 值。
library("plyr")
#Sample data
test_data <- data.frame(key = c("a","a","a","a","a","b","b","b","b","b"),
y = c(100,180,120,60,140,200,220,240,260,280),
x1 = c(50,60,79,85,90,133,140,120,160,170),
x2 = c(20,18,47,16,15,25,30,25,20,15))
#model
model_1 <- dlply(test_data, .(key),
function(test_data) lm(y ~ x1 + x2,data = test_data))
#coefficients
ldply(model_1, coef)
#adj r-squared
ldply(model_1, function(x) summary(x)$r.squared)
我试过这个,它得到了键和 p 值,但它没有变量的名称,我需要这些变量的名称,以便稍后能够将输出与模型的系数合并。
#p-values but missing the variable names
ldply(model_1, function(x) summary(x)$coefficients)[,c(1,5)]
我尝试使用 Do
和 dplyr
包中的 tidy
来拟合模型,这适用于小数据集,因为它实际上 returns 我需要的一切,但我的实际数据包含超过 1,000 个不同的段,RStudio 最终崩溃。
不需要 plyr
我想 sapply
就可以了。
sapply(model_1, function(x) summary(x)$coefficients[, 4])
a b
(Intercept) 0.3699423 0.3013515
x1 0.7698867 0.7307786
x2 0.9764913 0.3814288
并且 t()
将获得与您的估计配置相同的配置。
顺便说一下,您可能想看看 multidplyr
包,毕竟是为了 tidy
和 dplyr::do
。
我正在使用 "dplyr" 包来格式化输出。在 "dlply" 函数内部使用的函数中,您应该对 lm() 使用 summary(),因此当您调用 "coef" 时,它还将包含 p.values.
test_data <- data.frame(key = c("a","a","a","a","a","b","b","b","b","b"),
y = c(100,180,120,60,140,200,220,240,260,280),
x1 = c(50,60,79,85,90,133,140,120,160,170),
x2 = c(20,18,47,16,15,25,30,25,20,15))
model<-by(test_data,test_data$key,function(x)summary(lm(y~x1+x2,x)))
R2<-t(data.frame(lapply(model,function(x)x$adj.r.squared)));colnames(R2)<-"R2_adj";R2
R2_adj
a -0.8939647
b 0.4292186
Co<-as.data.frame(t(data.frame(lapply(model,function(x)x$coef))))
colnames(Co)<-c("intercept","x1","x2")
library(dplyr)
Co%>%
mutate(key=substr(rownames(Co),1,1),
variable=substr(rownames(Co),3,12))%>%
select(key,variable,intercept,x1,x2)
key variable intercept x1 x2
1 a Estimate 162.1822438 -0.6037364 0.07628315
2 a Std..Error 141.3436897 1.8054132 2.29385395
3 a t.value 1.1474318 -0.3344035 0.03325545
4 a Pr...t.. 0.3699423 0.7698867 0.97649134
5 b Estimate 271.0532276 0.3624009 -3.62853907
6 b Std..Error 196.2769562 0.9166979 3.25911570
7 b t.value 1.3809733 0.3953330 -1.11335080
8 b Pr...t.. 0.3013515 0.7307786 0.38142882