将函数应用于数据数组并将结果保存到另一个数组

时间:2017-07-21 23:41:46

标签: r

我在两个不同的场合试过这个。我想证明过度拟合和修补力量分析。 我只用了五个点生成了一些数据,并希望演示如何获得完美契合但是模型不好:

a<-4
b<-1
n<-5
x<-c(1:n)
y=a * x+b+rnorm(n,0,100)

model1=lm(y~x)
model2=lm(y~poly(x,2))
model3=lm(y~poly(x,3))
model4=lm(y~poly(x,4))

然而,我敢打赌有一种方法可以更优雅地做到这一点,我能想到的只是以某种方式使用sapply():

modeldat=c(1:4)
model[i]=sapply(modeldat,function(i) model2=lm(y~poly(x,i)))

所以在修修补补之后,我没有得到任何结果,只是坚持了解决方案&#34;如上所示。 现在,今天我玩了#34; pwr&#34;库用于计算某些假设数据所需的样本量。这是我提出的丑陋的解决方案,我打赌有一些方法可以用sapply()做到这一点。但是这样做:

test=(seq(0,1,by=0.1))
power<-function(x){
  pwr.t.test(,d=coensD,sig.level=0.05,power=x,type="two.sample")
}
sapply(test,power)

只会产生错误:

  

uniroot错误(function(n)eval(p.body) - power,c(2 + 1e-10,   1e + 09)):f()值不是符号相反的终点

在谷歌搜索了大约两个小时之后,我不是更聪明,并且做到了这一点......

plist=0
powerList=pwr.t.test(,d=1,sig.level=0.05,power=0.8,type="two.sample")
plist[1]=powerList$n
powerList=pwr.t.test(,d=1,sig.level=0.05,power=0.7,type="two.sample")
plist[2]=powerList$n
powerList=pwr.t.test(,d=1,sig.level=0.05,power=0.6,type="two.sample")
plist[3]=powerList$n
powerList=pwr.t.test(,d=1,sig.level=0.05,power=0.5,type="two.sample")
plist[4]=powerList$n
powerList=pwr.t.test(,d=1,sig.level=0.05,power=0.4,type="two.sample")
plist[5]=powerList$n

在这两种情况下,我都希望将函数应用于值数组并将它们存储在另一个数组中。必须有一个明显而简单的方法来做到这一点......

1 个答案:

答案 0 :(得分:0)

希望这有帮助!

df<-data.frame(model = c(1:4))
apply(df[,1,drop=F],1,function(i) lm(y~poly(x,i)))