gpt4 book ai didi

r - 在循环 R 中的因子水平时应用回归

转载 作者:行者123 更新时间:2023-12-02 07:36:59 26 4
gpt4 key购买 nike

我正在尝试将回归函数应用于因子(主题)的每个单独水平。这个想法是,对于每个主题,我可以根据他们的实际阅读时间 (RT) 和相应打印字符串 (WordLen) 的长度来预测阅读时间。一位同事帮助我提供了一些代码,用于根据 (Subject) 中另一个函数 (Region) 的每个级别应用该函数。但是,无论是原始代码还是我尝试的修改(通过单个因素跨中断应用该函数)都不起作用。

这是对一些示例数据的尝试:

 test0<-structure(list(Subject = c(101L, 101L, 101L, 101L, 101L, 101L, 
101L, 101L, 101L, 101L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
102L, 102L, 102L, 103L, 103L, 103L, 103L, 103L, 103L, 103L, 103L,
103L, 103L), Region = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L), RT = c(294L, 241L, 346L, 339L, 332L, NA, 399L,
377L, 400L, 439L, 905L, 819L, 600L, 520L, 811L, 1021L, 508L,
550L, 1048L, 1246L, 470L, NA, 385L, 347L, 592L, 507L, 472L, 396L,
761L, 430L), WordLen = c(3L, 3L, 3L, 3L, 3L, 3L, 5L, 7L, 3L,
9L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 5L, 7L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 5L, 7L, 3L)), .Names = c("Subject", "Region", "RT", "WordLen"
), class = "data.frame", row.names = c(NA, -30L))

不幸的是,这个数据返回了一个我的完整数据集没有遇到的问题:

"Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
0 (non-NA) cases"

可能是因为样本数据太少了?

无论如何,我希望有人能看到代码的问题,尽管我有能力提供工作数据...

这是原始代码(不起作用):

for(i in 1:length(levels(test0$Subject)))
for(j in 1:length(levels(test0$Region)))
{tmp=predict(lm(RT~WordLen,test0[test0$Subject==levels(test0$Subject)[i] & test0$Region==levels(test0$Region)[j],],na.action="na.exclude"))
test0[names(tmp),"rt.predicted"]=tmp
}

这是修改后的代码(毫不奇怪,它也不起作用):

for(i in 1:length(levels(test0$Subject)))
{tmp=predict(lm(RT~WordLen,test0[test0$Subject==levels(test0$Subject)[i],],na.action="na.exclude"))
test0[names(tmp),"rt.predicted"]=tmp
}

如果有任何建议,我将不胜感激。

最佳答案

您可以使用库 plyr 中的函数 ddply() 获得结果。这将根据 Subject 拆分数据框,计算回归模型的预测,然后将其作为新列添加到数据框。

ddply(test0,.(Subject),transform, 
pred=predict(lm(RT~WordLen,na.action="na.exclude")))

Subject Region RT WordLen pred
1 101 1 294 3 327.9778
......
4 101 1 339 3 327.9778
5 101 1 332 3 327.9778
6 101 2 NA 3 NA
7 101 2 399 5 363.8444
.......
13 102 1 600 3 785.4146

要按SubjectRegion 拆分数据,您应该将这两个变量都放在.() 中。

ddply(test0,.(Subject,Region),transform,
pred=predict(lm(RT~WordLen,na.action="na.exclude")))

关于r - 在循环 R 中的因子水平时应用回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15360852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com