【发布时间】:2015-10-19 06:27:45
【问题描述】:
我现在要在 R 中进行贝叶斯知识追踪,并且我的部分代码需要消除在给定 KC 上具有少于 3 个实例的学生,否则参数估计将不会收敛。为此,我目前有:
by_user = split(one_kc, one_kc$Anon.Student.id)
obs_by_user = sapply(by_user, nrow)
valid_users = names(obs_by_user[obs_by_user > 2])
student_outcomes = one_kc[one_kc$Anon.Student.id %in% valid_users,]
但由于某种原因,当我在我的环境中查看 by_user 时,无效用户仍然在其中列出,如果我尝试运行曲线拟合,值不会收敛,我相信这就是原因。我哪里错了?
编辑:这是我目前正在使用的更多代码:
df <- data.frame(read.table(file=file.choose(),na.strings="NA",sep="\t",quote="",header=TRUE, fill=TRUE))
df_subset <- df[,c(5,21,27,39,38)]
df_subset$Accuracy <- as.numeric(as.vector(df_subset$Accuracy))
df_subset <- na.omit(df_subset)
kc_list <- unique(df_subset$KC.Model.2A.)
#loop on the kc_list
for (kc in kc_list)
{
print(kc)
one_kc <- df_subset[ which(df_subset$KC.Model.2A.==kc), ]
one_kc <- one_kc[,c(1,3)]
# remove users with few observations on this skill
by_user = split(one_kc, one_kc$Anon.Student.id)
obs_by_user = sapply(by_user, nrow)
valid_users = names(obs_by_user[obs_by_user > 2])
student_outcomes = one_kc[one_kc$Anon.Student.id %in% valid_users,]
by_good_user = split(student_outcomes$Accuracy, student_outcomes$Anon.Student.id)
}
【问题讨论】:
-
你可能想看看这个link 关于一个最小的工作示例。如果您发布数据的一般结构,那将非常有帮助。 IE。
df <- data.frame(Anon.Student.id = 1:10, Accuracy = rnorm(10))以便我们能够重现您的问题!
标签: r list filtering curve-fitting bayesian-networks