y<-rweibull(150,1,2) #产生weibull分布的随机数
n<-length(y)
kekaoxingfx<-function(y,r,ind,opt,opp)
{
allorder<-sort(y)
or<-allorder[1:r]
if(r>n)
list(fail="输入长度大于样本量,重新输入")
else{
B1<-a-0.789*qnorm(1-(1+opp)/2,0,1) *a/sqrt(n)
B2<-a+0.789*qnorm(1-(1+opp)/2,0,1)*a/sqrt(n)
S1<-b+1.053* qnorm(1-(1+opp)/2,0,1)*b/(sqrt(n)*a)
S2<-b-1.053* qnorm(1-(1+opp)/2,0,1)*b/(sqrt(n)*a)
if(ind==0){
data.frame(Beta=a,Sigma=b, Beta_left=B1, Beta_right=B2, Sigma_left=S1, Sigma_right=S2)
}
else {
R<-exp(-(opt/b)^a)
R1<-exp(-(opt/S1)^B2)
R2<-exp(-(opt/S2)^B1)
t<-S1*(log(1/opp)^B1)
if(opp==0.95) data.frame(R=R,R_left=R1, R_right=R2,t=t)
else data.frame(R=R,R_left =R1)
}
}
}
fun<-function(x) #二元二次方程
{
f<-c(sum(or)+x[1],2*sum(or)+x[2]) #想用上面的kekaoxingfx函数里的or,r
j<-matrix(c(1,0,0,1),nrow=2,byrow=T)
list(f=f,j=j)
}
newton<-function(fun,x,ep=1e-5,it_max=100) #牛顿迭代法解上述二元二次方程
{
index<-0;k<-1
while(k<=it_max)
{
x1<-x;obj<-fun(x)
x<-x-solve(obj$j,obj$f);
norm<-sqrt((x-x1)%*%(x-x1))
if(norm<ep)
{
Index<-1;break
}
k<-k+1
}
obj<-fun(x);
list(Beta=x[1], Sigma=x[2],it=k,index=index,funval=obj$f)
}
z<-newton(fun,c(-6,1))
a<-as.numeric(z[1]) #把向量强制转化成数
b<-as.numeric(z[2]) #把向量强制转化成数
kekaoxingfx(y,2,1,100,0.95)
报错说:错误在sum(or) : 找不到这个目标对象"or"
请大家帮帮我吧,我还是初学者,对r不是很熟。谢谢大家


雷达卡



京公网安备 11010802022788号







