zoukankan      html  css  js  c++  java
  • R语言-回归分析笔记

    使用若干自变量并建立公式,以预测目标变量

    目标变量是连续型的,则称其为回归分析
    (1)一元线性回归分析
    y=kx+b
    sol.lm<-lm(y~x,data)
    abline(sol.lm)
    使模型误差的平方和最小,求参数k和b,称为最小二乘法
     
    k=cov(x,y)/cov(x,x)
    b=mean(y)-k*mean(x)
     
     估计参数b,k的取值范围 p元模型 p是自变量数,n是样本数
    [ki-sd(ki)ta/2(n-p-1),ki+sd(ki)ta/2(n-p-1)] k0表示回归模型的b;   k1表示k;sd(k)是标准差
    自由度 df<-sol.lm$df.residual
    left<-summary(sol.lm)$coefficients[,1]-summary(sol.lm)$coeffients[,2]*qt(1-alpha/2,df)
    right<-summary(sol.lm)$coefficients[,1]+summary(sol.lm)$coeffients[,2]*qt(1-alpha/2,df)
     
    衡量相关程度
    变量x和y相关系数r=Sxy/sqrt(Sxx)sqrt(Syy) 取值范围是[-1,1]  cor(x,y)  
    判定系数r^2
     
    修正判定系数 adjusted.r^2
    判定系数在用于多元回归分析时有一个缺点,自变量数越多,判定系数越大
     
    回归系数的显著性检验
     
    T检验 summary(sol.lm)$coefficients[,4]
    计算得到的p.value值越小,其值等于0的概率也就越小,当p.value<0.05,可认定k!=0
     
    F检验 summary(sol.lm)$p.value
    在整体上检验模型参数是否为0,并计算等于0的概率,当p.value<0.05,则通过了F检验
     
    summary(sol.lm)$fstatistic 给出了样本自由度f、自变量自由度df1、F值df2
     
    可以使用如下代码直接读取p.value值
    pf(f,df1,df2,lower.tail=F) 或 1-pf(f,df1,df2)

    模型误差(残差)  residuals
     
    对一个正确的回归模型,其误差要服从正态分布
     
    残差的标准误差可以从整体上体现一个模型的误差情况,它可以用于不同模型间性能的对比
     

    预测

    predict(sol.lm)

    (2)多元回归分析
    sol.lm<-lm(formula=y~. ,data.train)
     
    模型修正函数update(object,formula)
    update函数可以在lm模型结果的基础上任意添加或减少自变量,或对目标变量做取对数及开方等建模
     例如:
    增加x2平方变量
    lm.new<-update(sol.lm, .~.+I(x2^2))
    删除x2变量
    .~.-x2
    把x2变为x2平方变量
    .~.-x2+I(x2^2)
    增加x1*x2
    .~.+x1*x2
    在模型中对y开方建模
    sqrt(.)~.
     
    逐步回归分析函数 step()
    逐步减少变量的方法
    lm.step<-step(sol.lm)
    模型的ACI数值越小越好
     
    自变量中包含分类型数据的回归分析
    分类变量a的取值为i,则模型预测值是f(a1=0,...ai=1,ap=0)
     
    (3)Logic回归 y=1/(1+exp(-x)) 使用最大似然法来估算
    使用RODBC包读取Excel文件
     
    root<-"C:/"
    file<-paste(root,"data.xls",sep="")
    library(RODBC)
    excel_file<-odbcConnectExcel(file)
    data<-sqlFetch(excel_file,"data")
    close(excel_file)
     
    使用模型的预测正确率来衡量
     
                                   预测数据
                                  num11              num10
    实际数据                 num01             num00
     
    预测正确率=(num11+num00)/样本总数量=(num11+num00)/(num11+num10+num01+num00)
     
    t()返回转置
     
    glm()是用R语言实现logic回归分析的核心函数
    family=binomial("logit")
    使用step()函数对模型进行修正
    str函数查看包含的数据属性
     
    模型预测
    new<-predict(old,newdata=test.data)
    new<-1/(1+exp(-new))
    new<-as.factor(ifelse(new>=0.5,1,0))
     
    模型的性能衡量
    performance<-length(which((predict.data==data)==TRUE))/nrow(data)
    (4)回归树CART
    实现CART算法的核心函数是rpart包的rpart函数,再用plot函数画
    maptree包的draw.tree函数
     
    读取叶节点sol.rpart$frame$var=="<leaf>"
    读取叶节点序号sol$rpart$where
    要使测试集误差和回归树的规模尽可能小
     
    cp复杂度系数 sol.rpart$cptable
    xerror是通过交叉验证获得的模型误差
    xstd是模型误差的标准差     xerror取xerror+/-xstd
    剪枝就是找到一个合理的cp值
    随着拆分的增多,复杂性参数会单调下降,但预测误差会先降后生
     
    剪枝
    prune(sol.part,0.02) 把cp<0.02的树剪除
    使用plotcp()函数可以绘制出cp的波动关系
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    ReactNative 分享解决listView的一个郁闷BUG
    SDWebImage 图片下载缓存框架 常用方法及原理
    巧谈GCD
    Core Bluetooth下实现两个设备进行互联
    iOS开发Delegate,Notification,Block使用心得
    iOS开发之性能优化
    iOS开发之git学习
    iOS开发之自定义输入框(利用UITextField及UITextView)
    iOS开发之网络请求(基于AFNetworking的再封装)
    iOS开发之设置界面的抽取
  • 原文地址:https://www.cnblogs.com/luckyfang/p/5480959.html
Copyright © 2011-2022 走看看