自编函数
其他文章用的有自己编的,一起放到这里
#######################自己编的函数,运行后直接调用#####################
#计算mse的函数
mse = function(ei,p) #ei是残差向量,p是回归参数个数
{
n = length(ei)
sse = sum(ei**2)
mse = sse/(n-p)
return(mse)
}
#计算帽子矩阵,并提取对角线元素
H = function(X) #X是回归向量矩阵
{
h = X%*%solve(t(X)%*%X)%*%t(X)
hii = diag(h)
return(hii)
}
#学生化残差
ri = function(ei,X)
{
p = ncol(X) #回归系数个数
mse = mse(ei,p) #残差均方
hii = H(X) #返回帽子矩阵对角线元素
ans = ei/sqrt(mse*(1-hii)) #学生化残差
return(ans)
}
#外部学生化残差
ti = function(ei,X) #输入残差回归变量矩阵
{
p = ncol(X) #回归参数个数
n = length(ei) #数据个数
hii = H(X) #帽子矩阵主对角线元素
s2_i = ((n-p)*mse(ei,p) -(ei**2)/(1-hii)) / (n-p-1) #计算S(i)^2
ans = ei / sqrt(s2_i*(1-hii))
return(ans)
}
#计算PRESS统计量
press = function(ei,X) #X是自变量的设计矩阵
{
hii = H(X)
res = sum((ei/(1-hii))**2)
#View(res)
}
#计算PRESS的预测R^2
R_pred = function(X,y)
{
hii = H(X)
ei = resid(lm(y~X[,2]+X[,3]))
PRESS = sum((ei/(1-hii))**2)
sst = sum((y-mean(y))**2)
ans = 1-PRESS/sst
return(ans)
}
#绘制正态概率图
plot_ZP = function(ti) #输入外部学生化残差
{
n = length(ti)
order = rank(ti) #按升序排列,t(i)是第order个
Pi = (order-1/2)/n #累积概率
plot(ti,Pi,xlab = "学生化残差",ylab = "百分比") #画正态概率图
#添加回归线
fm = lm(Pi~ti)
abline(fm)
}
#进行失拟检验
# library(rsm) #加载rsm包用于失拟检验
# lm.rsm<-rsm(y~FO(x))
# loftest(lm.rsm) #调用失拟检验函数loftest
#计算Dii'
Di_i = function(i,i_,mse,beta1,beta2,new_data) #i第i个点,i_第i_个点,data数据集
{
one = beta1*(new_data$cases[i]-new_data$cases[i_])/sqrt(mse)
two = beta2*(new_data$distance[i]-new_data$distance[i_])/sqrt(mse)
ans = one**2 + two**2
return(ans)
}

浙公网安备 33010602011771号