我试图使用一个函数来生成一系列KS测试的p值 . 在我的例子中,我希望从我的aaa数据集中选择不同的第一个M [i]行,并在几个步骤过程之后生成预测glm回归值dd,最后比较每两个数据集以获得KS测试的p值 . 但我的代码效果不佳 . 我使用模拟数据在下面附加了我的代码:
set.seed(1)
aaa <- matrix(runif(8000*950), 8000, 950)
ph = sample(rep(0:1,l=950))
kst <- function(M){
N = length(M)
aa = list()
bb = list()
cc = list()
dd = list()
ee = list()
p = 0
for (i in 2:N){
aa[[i]] = aaa[1:M[i],] ## class(aaa) is matrix
bb[[i]] = rbind(ph, aa[[i]])
cc[[i]] = as.data.frame(t(bb[[i]]))
dd[[i]] = glm(data = cc[[i]], formula = ph~., family = binomial)
ee[[i]] = ks.test(predict(dd[[i-1]]), predict(dd[[i]]))
p[i] = ee[[i]]$p.value
}
return(p)
}
kst(M = seq(50,950,by=50))
但R说:
> kst(M = seq(50,950,by=50))
Error in UseMethod("predict") :
no applicable method for 'predict' applied to an object of class "NULL"
我认为我的ks.test循环也有错误,但我不知道如何解决它 . 有人可以帮我这个吗?提前致谢 .
1 回答
问题可能在
for (i in 1:N-1)
R将
1:N-1
解释为序列1到N,然后从整个向量中减去1 . 试试1:5-1
看看我的意思 .试试
for (i in 1:(N-1))
也在这一行
dd[[i+1]]
尚未定义,因为您的循环仅将dd
填充为i
.不确定这是你想要做的但是可能:
这样,在填写
dd
的第一个条目之后,您开始测试当前的dd
与之前的相比 .