本人正在学python,奈何基础太差,要是直接写还行,但是题目要求用类函数写,我对类运用实在不行,求指点
下列所需数据用下列代码模拟生成。
import random
n=30
x=list(range(n))
e=[random.gauss(mu=1.5,sigma=1) for k in range(n)]
y=[1+0.5*x[i]+e[i] for i in range(n)]
1、设计一个回归分析类并举例说明
(1)包含初始实例属性ydata(输入变量),xdata(输出变量),nsample(样本容量)
(2)包含实例方法:
(a)fitlm(输入:xdata,ydata; 输出:回归方程表达式,参数估计表
(包含参数点估计,区间估计,t统计量),方差分析表。)
(b)predict(输入:fitlm的结果,alpha值;输出:y的预测值,y的预测区间,残差序列)
我的代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import random
n=30
x=list(range(n))
e=[random.gauss(mu=1.5,sigma=1) for k in range(n)]
y=[1+0.5*x[i]+e[i] for i in range(n)]
class regression:
def init(self,x,y,n):
self.xdata = x
self.ydata = y
self.nsample = n
def regremoudle(self,x,y):
X_mean=np.mean(self.xdata)
Y_mean=np.mean(self.ydata)
S_xy=0
S_xx=0
S_yy=0
for i in range(len(x)):
S_xy = S_xy+(self.xdata[i]-x_mean)*(self.ydata[i]-y_mean)
S_xx = S_xx+pow(self.xdata[i]-x_mean,2)
S_yy = S_yy+pow(self.ydata[i]-y_mean,2)
b1=S_xy/S_xx
b0=Y_mean-b1*X_mean
print('b1:'+str(b1)+' b0:'+str(b0))
def fitlm(x,y):
return b1*x + b0
s=regression(x,y,len(x))