1.给出一元线性回归预测模型
2.设定固定的显著性水平为0.95(0.05)【此时R0.95的临界值为0.576】,计算相关系数R,进行显著性检验
3.按照预测年份,在固定的置信水平0.95(0.05)【t0.025(9)= 2.262】,计算2002、2003、2004年的点估计值、区间估计值。
4.提取Excel表内容解析数据,解析结果再写入Excel表
Excel表 模型用数据
序号xi |
年份 |
水路货运量实际值yi |
模型预测值 |
1 |
1991 |
1659 |
|
2 |
1992 |
1989 |
|
3 |
1993 |
2195 |
|
4 |
1994 |
2255 |
|
5 |
1995 |
2329 |
|
6 |
1996 |
2375 |
|
7 |
1997 |
2364 |
|
8 |
1998 |
2354 |
|
9 |
1999 |
2418 |
|
10 |
2000 |
2534 |
|
11 |
2001 |
2568 |
|
点估计值 |
区间估计值 |
||
12 |
2002 |
||
13 |
2003 |
||
14 |
2004 |
提取Excel表数据并进行一元线性回归分析的类:
AnalyzeData.Java
package xxhg; import java.awt.*; import java.awt.event.*; import javax.swing.table.DefaultTableModel; import javax.swing.*; import java.io.*; import jxl.*; import java.lang.Math; import java.io.File; public class Window extends JFrame{ JFrame f_major = new JFrame("商务智能与数据挖掘"); JTabbedPane tp = new JTabbedPane(); Font ft = new Font("Serif", Font.TRUETYPE_FONT, 18); Font ft1 = new Font("Serif", Font.ROMAN_BASELINE, 20); Font ft2 = new Font("Serif", Font.ROMAN_BASELINE, 15); Font ft3 = new Font("Serif", Font.TRUETYPE_FONT, 16); JPanel panel = new JPanel(); //控件定义 JLabel Hgfc_1=new JLabel("——————回归方程——————", JLabel.CENTER); JLabel Xgxjy_1=new JLabel("————相关性检验————", JLabel.CENTER); JLabel Xgxjy_2=new JLabel("显著性水平", JLabel.CENTER); JLabel Xgxjy_3=new JLabel("临界值R α=", JLabel.CENTER); JLabel Xgxjy_4=new JLabel("复相关系数 R=", JLabel.CENTER); JLabel Xgxjy_5=new JLabel("结 论", JLabel.CENTER); JLabel Ycsr_1=new JLabel("—————预测输入————", JLabel.CENTER); JLabel Ycsr_2=new JLabel("预测年份", JLabel.CENTER); JLabel Ycsr_3=new JLabel("置信水平", JLabel.CENTER); JLabel Ycsc_1=new JLabel("———————预测输出———————", JLabel.CENTER); JLabel Ycsc_2=new JLabel("预测结果:", JLabel.CENTER); JLabel Ycsc_3=new JLabel("预测区间:", JLabel.CENTER); JLabel Sjxsq_1=new JLabel("———————数据显示区———————", JLabel.CENTER); JButton Hgfc_b1=new JButton("显示"); JButton Xgxjy_b1=new JButton("相关性检验"); JButton Ycsr_b1=new JButton("预测分析"); JButton Sjxsq_b1=new JButton("显示原始数据"); JButton Cz_b=new JButton("重置"); JTextField Hgfc_tf1=new JTextField(20); JTextField Xgxjy_tf1=new JTextField(10); JTextField Xgxjy_tf2=new JTextField(10); JTextField Ycsc_tf1=new JTextField(15); JTextField Ycsc_tf2=new JTextField(20); JTextArea Jl_ta=new JTextArea(); JTable jTable = new JTable(); JComboBox Xgxjy_cb1=new JComboBox(); JComboBox Ycsr_cb1=new JComboBox(); JComboBox Ycsr_cb2=new JComboBox(); double[] x; double[] y; double[] p; double x_a=0; double y_a=0; double xy=0; double b; double a; double Lxx; double Lyy; double Lxy; double R; int N; int x_p; int x_o; double y_p; double zxsp; public static void main(String[] args) { Window win = new Window(); win.go(); } public void go() { //窗体界面设计 f_major.setSize(900,600); f_major.getContentPane().setLayout(new BorderLayout()); f_major.getContentPane().add("Center", tp);//把选项卡容器放入窗体中心位置 f_major.setFont(ft); f_major.setVisible(true); f_major.setResizable(true); //选项卡界面设计 tp.add("一元线性回归", panel); tp.setFont(ft); //界面设计 panel.setLayout(null); //回归方程界面 Hgfc_1.setSize(350, 40); Hgfc_1.setLocation(450, 0); Hgfc_1.setFont(ft1); Hgfc_tf1.setSize(300, 30); Hgfc_tf1.setLocation(460,40); Hgfc_b1.setSize(70, 30); Hgfc_b1.setLocation(770,40); Hgfc_b1.setFont(ft2); //相关性检验界面 Xgxjy_1.setSize(350, 40); Xgxjy_1.setLocation(450, 80); Xgxjy_1.setFont(ft1); Xgxjy_2.setSize(100, 40); Xgxjy_2.setLocation(445, 120); Xgxjy_2.setFont(ft2); Xgxjy_cb1.setSize(80, 20); Xgxjy_cb1.setLocation(550, 130); Xgxjy_cb1.addItem("0.05"); Xgxjy_3.setSize(100, 40); Xgxjy_3.setLocation(650,120 ); Xgxjy_3.setFont(ft2); Xgxjy_tf1.setSize(80, 20); Xgxjy_tf1.setLocation(750, 130); if( Xgxjy_cb1.getSelectedItem()=="0.05")Xgxjy_tf1.setText("0.576"); Xgxjy_4.setSize(150, 40); Xgxjy_4.setLocation(435, 160); Xgxjy_4.setFont(ft2); Xgxjy_tf2.setSize(150, 20); Xgxjy_tf2.setLocation(570, 170); Xgxjy_5.setSize(100, 40); Xgxjy_5.setLocation(430,190 ); Xgxjy_5.setFont(ft2); Jl_ta.setSize(280, 60); Jl_ta.setLocation(520, 200); //预测输入 Ycsr_1.setSize(350, 40); Ycsr_1.setLocation(450, 260); Ycsr_1.setFont(ft1); Ycsr_2.setSize(100, 40); Ycsr_2.setLocation(440, 300); Ycsr_2.setFont(ft2); Ycsr_cb1.setSize(80, 20); Ycsr_cb1.setLocation(570, 310); Ycsr_cb1.addItem("2002"); Ycsr_cb1.addItem("2003"); Ycsr_cb1.addItem("2004"); Ycsr_3.setSize(100, 40); Ycsr_3.setLocation(440, 340); Ycsr_3.setFont(ft2); Ycsr_cb2.setSize(80, 20); Ycsr_cb2.setLocation(570, 350); Ycsr_cb2.addItem("0.05"); Ycsr_b1.setSize(100, 30); Ycsr_b1.setLocation(720, 325); Ycsr_b1.setFont(ft2); //预测输出 Ycsc_1.setSize(350, 40); Ycsc_1.setLocation(450,380); Ycsc_1.setFont(ft1); Ycsc_2.setSize(100, 40); Ycsc_2.setLocation(450, 420); Ycsc_2.setFont(ft2); Ycsc_tf1.setSize(250, 30); Ycsc_tf1.setLocation(550, 425); Ycsc_3.setSize(100, 40); Ycsc_3.setLocation(450, 460); Ycsc_3.setFont(ft2); Ycsc_tf2.setSize(250, 30); Ycsc_tf2.setLocation(550, 465); Cz_b.setSize(120, 30); Cz_b.setLocation(20, 440); //数据显示区 Sjxsq_1.setSize(350, 40); Sjxsq_1.setLocation(10, 0); Sjxsq_1.setFont(ft1); jTable.setSize(400, 350); jTable.setLocation(10, 40); Sjxsq_b1.setSize(120, 30); Sjxsq_b1.setLocation(20, 390); panel.add(Hgfc_1); panel.add(Hgfc_tf1); panel.add(Hgfc_b1); panel.add(Xgxjy_1); panel.add(Xgxjy_2); panel.add(Xgxjy_cb1); panel.add(Xgxjy_3); panel.add(Xgxjy_tf1); panel.add(Xgxjy_4); panel.add(Xgxjy_tf2); panel.add(Xgxjy_5); panel.add(Jl_ta); panel.add(Ycsr_1); panel.add(Ycsr_2); panel.add(Ycsr_3); panel.add(Ycsr_cb1); panel.add(Ycsr_cb2); panel.add(Ycsr_b1); panel.add(Ycsc_1); panel.add(Ycsc_2); panel.add(Ycsc_3); panel.add( Ycsc_tf1); panel.add( Ycsc_tf2); panel.add(Cz_b); panel.add( jTable); panel.add( Sjxsq_1); panel.add(Sjxsq_b1); //对命令按钮 Hgfc_b1设置监视器 Hgfc_b1.addActionListener(new ShowEquation()) ; //对命令按钮 Hgfc_b1设置监视器 Xgxjy_cb1.addActionListener(new Checkout() ) ; //对命令按钮 Ycsr_b1设置监视器 Ycsr_b1.addActionListener(new Predict()) ; //对命令按钮Sjxsq_b1设置监视器 Sjxsq_b1.addActionListener(new ShowData()) ; } //Showequation作为监视器的内部类 class ShowEquation implements ActionListener{ @Override public void actionPerformed(ActionEvent arg0) { Hgfc_tf1.setText("Y="+a+b+"*X"); } } // Checkout作为监视器的内部类 class Checkout implements ActionListener{ @Override public void actionPerformed(ActionEvent arg0) { R=Lxy/Math.sqrt(Lxx*Lyy); Xgxjy_tf2.setText(""+R); if(R>Double.parseDouble(Xgxjy_tf1.getText().trim())) Jl_ta.setText("复相关系数R大于Rα,相关性显著,通过检验"); else Jl_ta.setText("复相关系数R不大于Rα,相关性不显著,不通过检验"); } } //Predict作为监视器的内部类 class Predict implements ActionListener{ @Override public void actionPerformed(ActionEvent arg0) { x_p=Integer.parseInt(String.valueOf( Ycsr_cb1.getSelectedItem())); zxsp=Double.parseDouble(String.valueOf( Ycsr_cb2.getSelectedItem())); y_p=a+b*(x_p-x_o); Ycsc_tf1.setText(""+y_p); double c,s; c=Math.sqrt((Lyy-b*Lxy)/(N-2)); s=2.2622*c*(Math.sqrt(1+1/N+Math.pow((x_p-x_o-x_a), 2)/Lxx)); Ycsc_tf2.setText("("+(y_p-s)+","+(y_p+s)+")"); } } //ShowData作为监视器的内部类 class ShowData implements ActionListener{ @Override public void actionPerformed(ActionEvent arg0) { try { InputStream stream = new FileInputStream(new File("H:/xxhg/cargo_data.xls")); // 获取Excel文件对象 Workbook rwb = Workbook.getWorkbook(stream); Cell cell = null; Sheet sheet = rwb.getSheet(0); DefaultTableModel tableModel=(DefaultTableModel) jTable.getModel(); tableModel.setColumnCount(sheet.getColumns()); tableModel.setRowCount(sheet.getRows()); Object[] object=new Object[jTable.getColumnCount()]; // 获取文件的指定工作表 默认的第一个 System.out.println(tableModel.getRowCount()); if(sheet.getRows()>2){ x=new double[sheet.getRows()+1]; y=new double[sheet.getRows()+1]; for(int i=0;i<sheet.getRows();i++) {//列循环 for(int j=0;j<sheet.getColumns();j++) { cell=sheet.getCell(j,i); if(cell.getType()==CellType.LABEL) { LabelCell labelcell=(LabelCell)cell; object[j]=labelcell.getString(); jTable.setValueAt(labelcell.getString(),i,j); } else if(cell.getType()==CellType.NUMBER) { Double numd; int numi; NumberCell numc10=(NumberCell)cell; numd=new Double(numc10.getValue()); numi=numd.intValue(); object[j]=numi; jTable.setValueAt(numi,i,j); if(i==1&&j==1) x_o=numi; if(j==1) x[i]=numi-x_o+1; x_a=x_a+x[i]; if(j==2) y[i]=numi; y_a=y_a+y[i]; xy=xy+x[i]*y[i]; } } } N=sheet.getRows()+1; x_a=x_a/N; y_a=y_a/N; for(int i=1;i<N;i++) { Lxx=Lxx+Math.pow(x[i]-x_a,2); Lyy=Lyy+Math.pow(y[i]-y_a,2); } Lxy=xy-N*x_a*y_a; b=Lxy/Lxx; a=y_a-b*x_a; } rwb.close(); } catch (Exception e) { System.out.println(e); } } }}
将解析结果写入Excel文档的类:
ExcelHandle.Java
package xxhg; import jxl.*; import jxl.format.UnderlineStyle; import jxl.write.*; import jxl.write.Number; import jxl.write.Boolean; import java.io.*; /** * Created by IntelliJ IDEA. * User: xl * Date: 2005-7-17 * Time: 9:33:22 * To change this template use File | Settings | File Templates. */ public class ExcelHandle { public ExcelHandle() { } /** * 读取Excel * * @param filePath */ public static void readExcel(String filePath) { try { InputStream is = new FileInputStream(filePath); Workbook rwb = Workbook.getWorkbook(is); //Sheet st = rwb.getSheet("0")这里有两种方法获取sheet表,1为名字,而为下标,从0开始 Sheet st = rwb.getSheet("original"); Cell c00 = st.getCell(0,0); //通用的获取cell值的方式,返回字符串 String strc00 = c00.getContents(); //获得cell具体类型值的方式 if(c00.getType() == CellType.LABEL) { LabelCell labelc00 = (LabelCell)c00; strc00 = labelc00.getString(); } //输出 System.out.println(strc00); //关闭 rwb.close(); } catch(Exception e) { e.printStackTrace(); } } /** * 输出Excel * * @param os */ public static void writeExcel(OutputStream os) { try { WritableWorkbook wwb = Workbook.createWorkbook(os); //创建Excel工作表 指定名称和位置 WritableSheet ws = wwb.createSheet("Test Sheet 1",0); Label label = new Label(0,0,"this is a label test"); ws.addCell(label); WritableFont wf = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true); WritableCellFormat wcf = new WritableCellFormat(wf); Label labelcf = new Label(1,0,"this is a label test",wcf); ws.addCell(labelcf); WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED); WritableCellFormat wcfFC = new WritableCellFormat(wfc); Label labelCF = new Label(1,0,"This is a Label Cell",wcfFC); ws.addCell(labelCF); Number labelN = new Number(0,1,3.1415926); ws.addCell(labelN); NumberFormat nf = new NumberFormat("#.##"); WritableCellFormat wcfN = new WritableCellFormat(nf); Number labelNF = new jxl.write.Number(1,1,3.1415926,wcfN); ws.addCell(labelNF); Boolean labelB = new jxl.write.Boolean(0,2,false); ws.addCell(labelB); jxl.write.DateTime labelDT = new jxl.write.DateTime(0,3,new java.util.Date()); ws.addCell(labelDT); DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss"); WritableCellFormat wcfDF = new WritableCellFormat(df); DateTime labelDTF = new DateTime(1,3,new java.util.Date(),wcfDF); ws.addCell(labelDTF); File image = new File("f:\\2.png"); WritableImage wimage = new WritableImage(0,1,2,2,image); ws.addImage(wimage); //写入工作表 wwb.write(); wwb.close(); } catch(Exception e) { e.printStackTrace(); } } public static void modifyExcel(File file1,File file2) { try { Workbook rwb = Workbook.getWorkbook(file1); WritableWorkbook wwb = Workbook.createWorkbook(file2,rwb);//copy WritableSheet ws = wwb.getSheet(0); WritableCell wc = ws.getWritableCell(0,0); //判断单元格的类型,做出相应的转换 if(wc.getType() == CellType.LABEL) { Label label = (Label)wc; label.setString("The value has been modified"); } wwb.write(); wwb.close(); rwb.close(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { try { //读Excel ExcelHandle.readExcel("f:/testRead.xls"); //输出Excel File fileWrite = new File("f:/testWrite.xls"); fileWrite.createNewFile(); OutputStream os = new FileOutputStream(fileWrite); ExcelHandle.writeExcel(os); //修改Excel ExcelHandle.modifyExcel(new File(""),new File("")); } catch(Exception e) { e.printStackTrace(); } } }