我找到了一个有用的功能,我在R中使用它来从线性模型中访问F统计p值
lmp<-function(modelobject){
if(class(modelobject !="lm" stop ("Not an object of class 'lm ")
f<-(modelobject)$fstatistic
p<-pf(f[1],f[2],f[3],lower.tail=F)
attributes(p)<-NULL
return(p)
}
但是,我需要使用此函数的数据不是类lm的对象,而是具有12个元素的列表。列表的每个元素都是从lm生成的摘要。 可以使用
访问列表数据中的每个摘要data[[1]]$fstatistic
我想更改函数以循环遍历列表中的每个元素并返回F统计p值,我尝试修改函数以包含for循环, lmpmod&LT; -function(modelobject){
for (i in 1:12) {
f<-(modelobject)[[i]]$fstatistic
p<-pf(f[1], f[2], f[3], lower.tail=F)
attributes(p)<-NULL
return(p)
}
}
但输出仍然覆盖了自己。 谁能告诉我如何修改这个函数,以便我可以访问列表中的每个元素并计算F统计值p值?
答案 0 :(得分:3)
尝试
lapply( data , function(x) { tmp <- summary(x)$fstatistic ;
pf( tmp[1] , tmp[2] , tmp[3] , lower.tail = F )
} )
例如......
# non-sensical lm!
set.seed(123)
y <- 1 + rnorm(10)
# this makes a list of 5 lm's using the response data 'y'
data <- replicate( 5 , lm( y ~ 1 + rnorm(10) ) , simpl = FALSE )
# Call 'summary' on model object to calculate the f-statistic, and run 'pf' to get p-value
sapply( data , function(x) { f <- summary(x)$fstatistic ; pf(f[1], f[2], f[3], lower.tail=F) } )
value value value value value
0.53263166 0.03896285 0.70298727 0.57721440 0.45352619