3

我发现了一个有用的函数,我一直在 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<-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 值?

4

1 回答 1

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 
于 2013-08-15T10:26:30.030 回答