我正在尝试使用一个函数来生成一系列KS测试的p值。在我的例子中,我希望从我的aaa数据集中选择不同的第一个M [i]行,并在几个步骤过程之后生成预测glm回归值dd,最后比较每两个数据集以获得KS测试sp值。但是我的代码并没有很好地运作。我使用模拟数据在下面附加了我的代码:
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循环也有错误,但我不知道如何修复它。 有人可以帮我这个吗?提前致谢。
答案 0 :(得分:1)
问题可能在for (i in 1:N-1)
R将1:N-1
解释为序列1到N,然后从整个向量中减去1。
试试1:5-1
看看我的意思。
尝试for (i in 1:(N-1))
也在这一行
ee[[i]] = ks.test(predict(dd[[i]]), predict(dd[[i+1]])) ## this line may also have problem.
dd[[i+1]]
尚未定义,因为您的循环仅将dd
填充到i
。
不确定这是你想要做的但是可能:
if(i>1L)ee[[i]] = ks.test(predict(dd[[i-1]]), predict(dd[[i]]))
这样,在您填写dd
的第一个条目后,您就开始测试当前dd
与之前的processData: false,
contentType: false
。