精华内容
下载资源
问答
  • 使用R语言做多元应用回归模型案例,内置R语言代码。包含相关系数的可视化、回归诊断、变量选择、回归诊断。 版权声明:代码下载只能自己学习使用,切勿用于商业用途,违者必究。
  • R的阶段性复习小结 1. 数据说明 User_ID:用户ID Gender: 性别,M为男性,F为女性 Age:年龄段,划分为0-17、18-25、26-35、36-45、46-55、55+共六个年龄段 Occupation:职业,已转换为数字标签,共有21类...

    R的阶段性复习小结–回归

    1. 数据说明

    • User_ID:用户ID Gender:
    • 性别,M为男性,F为女性
    • Age:年龄段,划分为0-17、18-25、26-35、36-45、46-55、55+共六个年龄段
    • Occupation:职业,已转换为数字标签,共有21类职业
    • Stay_In_Current_City_Years:所在城市居住年份,分为0、1、2、3、4+五个类别
    • Marital_Status:婚姻状况,0为未婚,1为已婚
    • 件数:本次消费所购买的商品数目
    • 消费总额:该用户本次消费所支出的总金额,单位为美元

    首先读入数据,file.choose()可以跳出窗口选择文件,输出文件所在位置,超级好用!!!

    #install.packages(“Rserve”)
    library(“Rserve”)
    Rserve()
    Starting Rserve…
    “C:\Users\LENOVO\DOCUME1\R\WIN-LI1\3.3\Rserve\libs\x64\Rserve.exe”
    #R与tableau连接
    file.choose()
    [1] “F:\新建文件夹 (6)\黑色星期五\book233用户信息.csv”
    #读取文件位置
    user=read.csv(“F:\新建文件夹 (6)\黑色星期五\book233用户信息.csv”)`
    #查看数据结构
    str(user)
    ‘data.frame’: 1047 obs. of 8 variables:
    $ User_ID : int 1000001 1000003 1000005 1000006 1000015 1000019 1000020 1000022 1000024 1000033 …
    $ Gender : Factor w/ 3 levels “”,“F”,“M”: 2 3 3 2 3 3 3 3 2 3 …
    $ Age : Factor w/ 8 levels “”,“0-17”,“18-25”,…: 2 4 4 7 4 2 4 3 4 6 …
    $ Occupation : int 10 15 20 9 7 10 14 15 7 3 …
    $ Stay_In_Current_City_Years: Factor w/ 6 levels “”,“0”,“1”,“2”,…: 4 5 3 3 3 5 2 6 5 3 …
    $ Marital_Status : int 0 0 1 0 0 0 0 0 1 1 …
    $ 件数 : int 34 29 106 46 116 144 12 155 76 215 …
    $ 消费总额 : int 333481 341635 821001 379450 1047124 1457938 185747 1279678 720850 1940043 …

    2. 数据预处理

    (1) 删除第一列的用户ID,在利用用户个人信息对用户消费总额进行拟合的过程中,用户ID显然是不能作为自变量的。(唯一属性并不能描述事件本身的分布规律)
    (2)删除用户购买商品的数量,由于缺少用户购买商品的具体信息(购买了哪一类商品,不同类别购买商品的数量等),所以将其作为自变量难以描述分布规律。
    (3)缺失值处理,经过检测缺失值数量很少,直接删除比较有效。

    > #install.packages("mice")
    > library("mice")
    > md.pattern(user)  #缺失值检测
         Gender Age Stay_In_Current_City_Years 件数 消费总额 User_ID Occupation Marital_Status  
    1045      1   1                          1    1        1       1          1              1 0
       1      1   1                          1    1        1       0          0              0 3
       1      1   1                          1    0        0       0          0              0 5
              0   0                          0    1        1       2          2              2 8
    > users=na.omit(user)#缺失值删除
    > md.pattern(users)
         User_ID Gender Age Occupation Stay_In_Current_City_Years Marital_Status 件数 消费总额  
    [1,]       1      1   1          1                          1              1    1        1 0
    [2,]       0      0   0          0                          0              0    0        0 0
    > #可以看到已经没有缺失值啦
    > users_1=users[,-7]
    > users_12=users_1[,-1]
    > #删除1、7 列
    > str(users_12)
    'data.frame':	1045 obs. of  6 variables:
     $ Gender                    : Factor w/ 3 levels "","F","M": 2 3 3 2 3 3 3 3 2 3 ...
     $ Age                       : Factor w/ 8 levels "","0-17","18-25",..: 2 4 4 7 4 2 4 3 4 6 ...
     $ Occupation                : int  10 15 20 9 7 10 14 15 7 3 ...
     $ Stay_In_Current_City_Years: Factor w/ 6 levels "","0","1","2",..: 4 5 3 3 3 5 2 6 5 3 ...
     $ Marital_Status            : int  0 0 1 0 0 0 0 0 1 1 ...
     $ 消费总额                  : int  333481 341635 821001 379450 1047124 1457938 185747 1279678 720850 1940043 ...
    

    (4)变量类型转换,可以发现表示职业以及婚姻状况的分类变量被自动录入为整数型变量,对二者进行变量类型的转换。
    (5)异常值的查看与处理,通过数据的描述可以得知只有消费总额这一变量会出现异常值。异常值为高额消费,结合问题背景,决定不对异常值做处理,其更可能代表少数消费者的消费状态,符合常识。
    (6)建立训练集与测试集。在这里插入图片描述

    > users_12$Occupation= as.factor(users_12$Occupation)
    > users_12$Marital_Status= as.factor(users_12$Marital_Status)
    > str(users_12)
    'data.frame':	1045 obs. of  6 variables:
     $ Gender                    : Factor w/ 3 levels "","F","M": 2 3 3 2 3 3 3 3 2 3 ...
     $ Age                       : Factor w/ 8 levels "","0-17","18-25",..: 2 4 4 7 4 2 4 3 4 6 ...
     $ Occupation                : Factor w/ 21 levels "0","1","2","3",..: 11 16 21 10 8 11 15 16 8 4 ...
     $ Stay_In_Current_City_Years: Factor w/ 6 levels "","0","1","2",..: 4 5 3 3 3 5 2 6 5 3 ...
     $ Marital_Status            : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 1 1 2 2 ...
     $ 消费总额                  : int  333481 341635 821001 379450 1047124 1457938 185747 1279678 720850 1940043 ...
     > boxplot(users_12$ 消费总额 ,col="yellow")  #箱型图查看缺失值
    > boxplot.stats(users_12$ 消费总额)
    $stats
    [1]   45551  281780  730131 1672669 3737504
    $n
    [1] 1045
    $conf
    [1] 662149.4 798112.6
    $out
     [1]  4355777  6573609  5212846  6310604  4997527  4647555  3917492  4681205  4255176  4054112
    [11]  5499812  3770941  6511302  3786677  4003012  5628295  4728932  6387899  4178546  3888766
    [21]  5805353  4503530  5136424  5103795  3977702  4055317  8699232  4358776  3797112  6817493
    [31]  5549841  5166938  4433272  4135916  4032859  7577505  4303859  6126540  4453785  5673106
    [41]  3955182  6476786  4028509  4528519  6186498  5961987  4384924  4664260  5153189  4622308
    [51]  6044178  4152683  4094730  3847749  4836540 10536783  4256751  5733683  6565878  4006176
    [61]  5129726  5150348  4642305  4689382  4174884  4458155  3824963  4098692  4246978  5075337
    [71]  5985405  4354802
    > #建立训练集与测试集
    > ind  = sample(2,nrow(users_12),replace = TRUE,prob=c(0.7,0.3))
    > train=users_12[ind==1,]
    > test=users_12[ind==2,]
    

    3. 通过多元线性回归预测用户消费总额

    #多元线性回归
    > set.seed((12))
    > users_lm=lm(消费总额~Gender+Age+Occupation+Stay_In_Current_City_Years,data=train)
    > users_lm
    
    Call:
    lm(formula = 消费总额 ~ Gender + Age + Occupation + Stay_In_Current_City_Years, 
        data = train)
    
    Coefficients:
                     (Intercept)                       GenderM                      Age18-25  
                         1112974                        330122                       -204918  
                        Age26-35                      Age36-45                      Age46-50  
                            3245                       -195851                       -274017  
                        Age51-55                        Age55+                   Occupation1  
                         -573862                       -857404                        152753  
                     Occupation2                   Occupation3                   Occupation4  
                          133586                        277339                        190566  
                     Occupation5                   Occupation6                   Occupation7  
                           69889                        792490                        145483  
                     Occupation8                   Occupation9                  Occupation10  
                         -604240                       -469454                       -203505  
                    Occupation11                  Occupation12                  Occupation13  
                          207628                       -313140                       -330398  
                    Occupation14                  Occupation15                  Occupation16  
                          341738                         36168                        922765  
                    Occupation17                  Occupation18                  Occupation19  
                          -83717                        280807                         78211  
                    Occupation20   Stay_In_Current_City_Years1   Stay_In_Current_City_Years2  
                          652190                       -208613                        -33459  
     Stay_In_Current_City_Years3  Stay_In_Current_City_Years4+  
                         -185424                       -208820  
    
    > summary(users_lm)
    
    Call:
    lm(formula = 消费总额 ~ Gender + Age + Occupation + Stay_In_Current_City_Years, 
        data = train)
    
    Residuals:
         Min       1Q   Median       3Q      Max 
    -1933294  -833549  -358080   413600  8366773 
    
    Coefficients:
                                 Estimate Std. Error t value Pr(>|t|)   
    (Intercept)                   1112974     534216   2.083  0.03758 * 
    GenderM                        330122     112565   2.933  0.00347 **
    Age18-25                      -204918     499728  -0.410  0.68189   
    Age26-35                         3245     501646   0.006  0.99484   
    Age36-45                      -195851     510165  -0.384  0.70117   
    Age46-50                      -274017     540614  -0.507  0.61241   
    Age51-55                      -573863     526379  -1.090  0.27600   
    Age55+                        -857404     557787  -1.537  0.12471   
    Occupation1                    152753     210666   0.725  0.46864   
    Occupation2                    133586     247114   0.541  0.58897   
    Occupation3                    277339     298621   0.929  0.35335   
    Occupation4                    190566     196994   0.967  0.33370   
    Occupation5                     69890     457117   0.153  0.87853   
    Occupation6                    792490     352716   2.247  0.02496 * 
    Occupation7                    145483     203931   0.713  0.47584   
    Occupation8                   -604240     662511  -0.912  0.36206   
    Occupation9                   -469454     664999  -0.706  0.48046   
    Occupation10                  -203505     513061  -0.397  0.69175   
    Occupation11                   207628     364321   0.570  0.56893   
    Occupation12                  -313140     230735  -1.357  0.17517   
    Occupation13                  -330398     541278  -0.610  0.54179   
    Occupation14                   341738     262857   1.300  0.19400   
    Occupation15                    36168     316049   0.114  0.90892   
    Occupation16                   922765     297426   3.103  0.00200 **
    Occupation17                   -83717     248834  -0.336  0.73664   
    Occupation18                   280807     594842   0.472  0.63703   
    Occupation19                    78211     436344   0.179  0.85780   
    Occupation20                   652190     235661   2.767  0.00580 **
    Stay_In_Current_City_Years1   -208613     149594  -1.395  0.16360   
    Stay_In_Current_City_Years2    -33459     171450  -0.195  0.84533   
    Stay_In_Current_City_Years3   -185424     174960  -1.060  0.28960   
    Stay_In_Current_City_Years4+  -208820     178018  -1.173  0.24119   
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 1288000 on 697 degrees of freedom
    Multiple R-squared:  0.08683,	Adjusted R-squared:  0.04622 
    F-statistic: 2.138 on 31 and 697 DF,  p-value: 0.0003726
    
    > lm_predictions= predict(users_lm, test)
    > #install.packages("gmodels")
    > library("gmodels")
    > #计算相对误差
    > w_lm=mean((lm_predictions-test$消费总额)^2)/ mean((mean(test$消费总额)- test$消费总额)^2)
    > w_lm
    [1] 1.007764
    > w__lm=mean((lm_predictions-test$消费总额)^2)
    > w__lm
    [1] 2.127004e+12
    > plot(lm_predictions,test$消费总额)
    > 
    

    其中T检验的结果还是可以的,自变量都是非常显著,p-value同样也是非常显著,但是调整后的R-squared: 0.04622 ,非常不佳,说明自变量对于因变量的解释率仅为4.6%
    模型的相对误差为1.007764,绝对误差2.127004e+12

    4. 通过随机森林预测用户消费总额

    randomForest(x, y=NULL, ntree=500,importance=FALSE,localImp=FALSE, nPerm=1,mtry=3, proximity)

    x:代表需要预测的列,species是列的名称。
    y:生成决策树的训练集
    ntree:生成决策树的数目
    nperm:计算importance时的重复次数
    mtry:选择的分裂属性的个数
    proximity=TRUE:表示生成临近矩阵
    importance=TRUE:输出分裂属性的重要性

    > #随机森林
    > set.seed(123)
    > library("randomForest")
    > users_tree=randomForest(消费总额~.,data=train,importance=TRUE,ntree=100)
    > print(users_tree)
    
    Call:
     randomForest(formula = 消费总额 ~ ., data = train, importance = TRUE,      ntree = 100) 
                   Type of random forest: regression
                         Number of trees: 100
    No. of variables tried at each split: 1
    
              Mean of squared residuals: 1.720726e+12
                        % Var explained: 0.96
    > importance((users_tree))
                                 %IncMSE IncNodePurity
    Gender                     4.6765780  1.445564e+13
    Age                        4.0652253  4.626723e+13
    Occupation                 2.7830964  9.723711e+13
    Stay_In_Current_City_Years 2.3300941  3.103846e+13
    Marital_Status             0.7702007  1.082766e+13
    > tree_predictions= predict(users_tree, test)
    > t_lm=mean((tree_predictions-test$消费总额)^2)/ mean((mean(test$消费总额)- test$消费总额)^2)
    > t_lm
    [1] 1.001825
    > t__lm=mean((tree_predictions-test$消费总额)^2)
    > t__lm
    [1] 2.114469e+12
    
    
    > #改变决策森林中树的数目
    > users_tree_2=randomForest(消费总额~.,data=train,importance=TRUE,ntree=1000)
    > print(users_tree_2)
    
    Call:
     randomForest(formula = 消费总额 ~ ., data = train, importance = TRUE,      ntree = 1000) 
                   Type of random forest: regression
                         Number of trees: 1000
    No. of variables tried at each split: 1
    
              Mean of squared residuals: 1.720764e+12
                        % Var explained: 0.95
    > importance((users_tree_2))
                                %IncMSE IncNodePurity
    Gender                     9.670613  1.709002e+13
    Age                        6.188277  4.585156e+13
    Occupation                 7.528485  1.080333e+14
    Stay_In_Current_City_Years 3.679895  3.365439e+13
    Marital_Status             1.603983  9.651066e+12
    > tree_2_predictions= predict(users_tree_2, test)
    > t2_lm=mean((tree_2_predictions-test$消费总额)^2)/ mean((mean(test$消费总额)- test$消费总额)^2)
    > t2_lm
    [1] 1.001088
    > t2__lm=mean((tree_2_predictions-test$消费总额)^2)
    > t2__lm
    [1] 2.112913e+12
    > 
    >    
    > #改变决策森林中树的数目
    > users_tree_3=randomForest(消费总额~.,data=train,importance=TRUE,ntree=5)
    > print(users_tree_3)
    
    Call:
     randomForest(formula = 消费总额 ~ ., data = train, importance = TRUE,      ntree = 5) 
                   Type of random forest: regression
                         Number of trees: 5
    No. of variables tried at each split: 1
    
              Mean of squared residuals: 1.999001e+12
                        % Var explained: -15.06
    > importance((users_tree_3))
                                  %IncMSE IncNodePurity
    Gender                      2.1048620  2.034920e+13
    Age                         2.0914720  7.205510e+13
    Occupation                 -0.1595652  1.474722e+14
    Stay_In_Current_City_Years  0.3312179  4.161017e+13
    Marital_Status              0.1408100  2.436103e+13
    > tree_3_predictions= predict(users_tree_3, test)
    > t3_lm=mean((tree_3_predictions-test$消费总额)^2)/ mean((mean(test$消费总额)- test$消费总额)^2)
    > t3_lm
    [1] 1.0148
    > t3__lm=mean((tree_3_predictions-test$消费总额)^2)
    > t3__lm
    [1] 2.141854e+12
    
    

    结果对比

    树的数目% Var explained:测试集相对误差
    1000.961.001825
    10000.951.001088
    5-15.061.0148

    这里一个重要的系数是% Var explained,称为拟合优度,它的作用类似于之前回归分析中的R方。
    一般来说,树数量越多,性能越好,预测越稳定,但也会减慢计算速度。通过对于模型中树的数量进行更改,可以发现在拟合优度中,最优者并非1000,而是100颗。
    不过在对于测试集的检验中,误差符合认知,从5颗树到100棵,相对误差有了一个较大的提高,但是在从100到1000棵树的改变,并没有带来可以与前者媲美的改进。
    可以用varImpPlot命令,画出自变量重要性排序图,

    varImpPlot(users_tree)
    

    在这里插入图片描述

    思考

    显而易见随机森林比多元线性回归的拟合效果了一点,但是这个拟合还是太差了,可能是由于自变量均为分类变量,拿来拟合一个数值型变量过于牵强,因为分类变量的排列组合有限,而数值型变量的变化更为复杂
    针对这种类型,更适合将因变量分箱,然后用分类的方式进行拟合。
    (可以试试在多元回归的模型中插入交叉项,以此来增加变化类型)

    插入二次项的尝试

    尝试中又发现了让人困惑的点
    可以看到在加入各项的平方项之后,拟合优度从4.6%,提高到了8.8%;这和预期效果是一样的,然而在加入交叉项之后不增反降,还出现了陌生词汇“秩缺乏拟合”
    可能原因:存在强相关的自变量,也就是设计矩阵非满秩的,会导致这样的结果,也有可能是你的目标是线性可分的,用线性回归就好了

    > #加入平方项
    > set.seed((12))
    > users_jx_lm=lm(消费总额~Gender+Age+Occupation+Stay_In_Current_City_Years+Gender**2+Age**2+Occupation**2+Stay_In_Current_City_Years**2+Gender*Age+Occupation*Stay_In_Current_City_Years,data=train)
    > 
    > summary(users_jx_lm)
    
    Call:
    lm(formula = 消费总额 ~ Gender + Age + Occupation + Stay_In_Current_City_Years + 
        Gender^2 + Age^2 + Occupation^2 + Stay_In_Current_City_Years^2 + 
        Gender * Age + Occupation * Stay_In_Current_City_Years, data = train)
    #由于太长了symmary只保留了关键信息---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 1259000 on 620 degrees of freedom
    Multiple R-squared:  0.2238,	Adjusted R-squared:  0.08856 
    F-statistic: 1.655 on 108 and 620 DF,  p-value: 0.000131
    
    
    #加入交叉项和平方项
    > w__jx_lm=mean((lm_jx_predictions-test$消费总额)^2)
    > users_jx_lm=lm(消费总额~Gender+Age+Occupation+Stay_In_Current_City_Years+Gender**2+Age**2+Occupation**2+Stay_In_Current_City_Years**2+Gender*Age+Occupation*Stay_In_Current_City_Years*Gender+Age*Occupation+Stay_In_Current_City_Years*Age,data=train)
    > summary(users_jx_lm)
    
    Call:
    lm(formula = 消费总额 ~ Gender + Age + Occupation + Stay_In_Current_City_Years + 
        Gender^2 + Age^2 + Occupation^2 + Stay_In_Current_City_Years^2 + 
        Gender * Age + Occupation * Stay_In_Current_City_Years * 
        Gender + Age * Occupation + Stay_In_Current_City_Years * 
        Age, data = train)
    
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 1296000 on 472 degrees of freedom
    Multiple R-squared:  0.3745,	Adjusted R-squared:  0.03519 
    F-statistic: 1.104 on 256 and 472 DF,  p-value: 0.1805
    
    > lm_jx_predictions= predict(users_jx_lm, test)
    Warning message:
    In predict.lm(users_jx_lm, test) : 用秩缺乏拟合来进行预测的结果很可能不可靠
    > #计算相对误差
    > w_jx_lm=mean((lm_jx_predictions-test$消费总额)^2)/ mean((mean(test$消费总额)- test$消费总额)^2)
    > w_jx_lm
    [1] 1.491868
    > w__jx_lm=mean((lm_jx_predictions-test$消费总额)^2)
    > w__jx_lm
    [1] 3.148763e+12
    
    展开全文
  • R语言多元Logistic回归 应用案例 多元Logistic回归 如何进行多重逻辑回归 可以使用阶梯函数通过逐步过程确定多重逻辑回归。此函数选择模型以最小化AIC,而不是像手册中的SAS示例那样根据p值。另请注意,在此...

    原文链接http://tecdat.cn/?p=2640  

    原文出处:拓端数据部落公众号

    可以使用逐步回归过程确定多元逻辑回归。此函数选择模型以最小化AIC。

    如何进行多元逻辑回归

    可以使用step函数通过逐步回归过程确定多元逻辑回归。此函数选择模型以最小化AIC。

    通常建议不要盲目地遵循逐步回归程序,而是要使用拟合统计(AIC,AICc,BIC)比较模型,或者根据生物学或科学上合理的可用变量建立模型。

    多元相关是研究潜在自变量之间关系的一种工具。例如,如果两个独立变量彼此相关,可能在最终模型中都不需要这两个变量,但可能有理由选择一个变量而不是另一个变量。

    多元相关

    创建数值变量的数据框

    
    
    Data.num $ Status = as.numeric(Data.num $ Status)
    
    Data.num $ Length = as.numeric(Data.num $ Length)
    
    Data.num $ Migr = as.numeric(Data.num $ Migr)
    
    Data.num $ Insect = as.numeric(Data.num $ Insect)
    
    Data.num $ Diet = as.numeric(Data.num $ Diet)
    
    Data.num $ Broods = as.numeric(Data.num $ Broods)
    
    Data。 num $ Wood = as.numeric(Data.num $ Wood)
    
    Data.num $ Upland = as.numeric(Data.num $ Upland)
    
    Data.num $ Water = as.numeric(Data.num $ Water)
    
    Data.num $ Release = as.numeric(Data.num $ Release)
    
    Data.num $ Indiv = as.numeric(Data.num $ Indiv)
    
    ###检查新数据框
    
    headtail(Data.num)
    
    1 1 1520 9600.0 1.21 1 12 2 6.0 1 0 0 1 6 29
    
    2 1 1250 5000.0 0.56 1 0 1 6.0 1 0 0 1 10 85
    
    3 1 870 3360.0 0.07 1 0 1 4.0 1 0 0 1 3 8
    
    77 0 170 31.0 0.55 3 12 2 4.0 NA 1 0 0 1 2
    
    78 0 210 36.9 2.00 2 8 2 3.7 1 0 0 1 1 2
    
    79 0 225 106.5 1.20 2 12 2 4.8 2 0 0 0 1 2
    
    ###检查变量之间的相关性
    
    ###这里使用了Spearman相关性

    多元逻辑回归的例子

    在此示例中,数据包含缺失值。在R中缺失值用NA表示。SAS通常会无缝地处理缺失值。虽然这使用户更容易,但可能无法确保用户了解这些缺失值的作用。在某些情况下,R要求用户明确如何处理缺失值。处理多元回归中的缺失值的一种方法是从数据集中删除具有任何缺失值的所有观察值。这是我们在逐步回归过程之前要做的事情,创建一个名为Data.omit的数据框。但是,当我们创建最终模型时,我们只想排除那些在最终模型中实际包含的变量中具有缺失值的观察样本。为了测试最终模型的整体p值,绘制最终模型,或使用glm.compare函数,我们将创建一个名为Data.final的数据框,只排除那些观察结果。

    尽管二项式和poission分布中的模型应该没问题,但是对于使用某些glm拟合的步骤过程存在一些注意事项。

    用逐步回归确定模型

    最终模型

    summary(model.final)
    
    
    Coefficients:
    
                  Estimate Std. Error z value Pr(>|z|)   
    
    (Intercept) -3.5496482  2.0827400  -1.704 0.088322 . 
    
    Upland      -4.5484289  2.0712502  -2.196 0.028093 * 
    
    Migr        -1.8184049  0.8325702  -2.184 0.028956 * 
    
    Mass         0.0019029  0.0007048   2.700 0.006940 **
    
    Indiv        0.0137061  0.0038703   3.541 0.000398 ***
    
    Insect       0.2394720  0.1373456   1.744 0.081234 . 
    
    Wood         1.8134445  1.3105911   1.384 0.166455   

    伪R方

    $Pseudo.R.squared.for.model.vs.null
    
                                 Pseudo.R.squared
    
    McFadden                             0.700475
    
    Cox and Snell (ML)                   0.637732
    
    Nagelkerke (Cragg and Uhler)         0.833284

    模型总体p值

    在最终模型中创建包含变量的数据框,并省略NA。

    偏差表分析

    Analysis of Deviance Table
    
     
    
    Model 1: Status ~ Upland + Migr + Mass + Indiv + Insect + Wood
    
    Model 2: Status ~ 1
    
      Resid. Df Resid. Dev Df Deviance  Pr(>Chi)   
    
    1        63     30.392                         
    
    2        69     93.351 -6  -62.959 1.125e-11 ***

    似然比检验

    Likelihood ratio test
    
     
    
      #Df  LogLik Df  Chisq Pr(>Chisq)   
    
    1   7 -15.196                        
    
    2   1 -46.675 -6 62.959  1.125e-11 ***

    标准化残差图

    简单的预测值图

    在最终模型中创建包含变量的数据框,并在NA中省略

    过度离散检验

    过度离散是glm的deviance残差相对于自由度较大的情况。这些值显示在模型的摘要中。一个指导原则是,如果deviance残差与剩余自由度的比率超过1.5,则模型过度离散。过度离散表明模型不能很好地拟合数据:解释变量可能无法很好地描述因变量,或者可能无法为这些数据正确指定模型。如果存在过度离散,一种可能的解决方案是 在glm中使用quasibinomial family选项。

    Null deviance: 93.351  on 69  degrees of freedom
    
    Residual deviance: 30.392  on 63  degrees of freedom
    
    deviance /   df.residual
    
     
    
    [1] 0.482417

    评估模型的替代方法

    使用逐步回归程序的替代或补充是将模型与拟合统计进行比较。我的compare.glm 函数将为glm模型显示AIC,AICc,BIC和伪R平方。使用的模型应该都拟合相同的数据。也就是说,如果数据集中的不同变量包含缺失值,则应该谨慎使用。如果您对使用哪种拟合统计数据没有任何偏好,您希望在最终模型中使用较少的项,我可能会推荐AICc或BIC。

    一系列模型可以与标准的anova 进行比较。模型应嵌套在先前模型中或anova函数列表中的下一个模型中; 和模型应该拟合相同的数据。在比较多个回归模型时,通常放宽p值为0.10或0.15。

    在以下示例中,使用通过逐步回归过程选择的模型。请注意,虽然模型9最小化了AIC和AICc,但模型8最小化了BIC。anova结果表明模型8不是对模型7的显着改进。这些结果支持选择模型7,8或9中的任何一个。  

    compareGLM(model.1, model.2, model.3, model.4, model.5, model.6,
               model.7, model.8, model.9)
    
     
    
    $Models
    
      Formula                                                  
    
    1 "Status ~ 1"                                             
    
    2 "Status ~ Release"                                       
    
    3 "Status ~ Release + Upland"                               
    
    4 "Status ~ Release + Upland + Migr"                       
    
    5 "Status ~ Release + Upland + Migr + Mass"                
    
    6 "Status ~ Release + Upland + Migr + Mass + Indiv"        
    
    7 "Status ~ Release + Upland + Migr + Mass + Indiv + Insect"
    
    8 "Status ~ Upland + Migr + Mass + Indiv + Insect"         
    
    9 "Status ~ Upland + Migr + Mass + Indiv + Insect + Wood"  
    
     
    
    $Fit.criteria
    
      Rank Df.res   AIC  AICc   BIC McFadden Cox.and.Snell Nagelkerke   p.value
    
    1    1     66 94.34 94.53 98.75   0.0000        0.0000     0.0000       Inf
    
    2    2     65 62.13 62.51 68.74   0.3787        0.3999     0.5401 2.538e-09
    
    3    3     64 56.02 56.67 64.84   0.4684        0.4683     0.6325 3.232e-10
    
    4    4     63 51.63 52.61 62.65   0.5392        0.5167     0.6979 7.363e-11
    
    5    5     62 50.64 52.04 63.87   0.5723        0.5377     0.7263 7.672e-11
    
    6    6     61 49.07 50.97 64.50   0.6118        0.5618     0.7588 5.434e-11
    
    7    7     60 46.42 48.90 64.05   0.6633        0.5912     0.7985 2.177e-11
    
    8    6     61 44.71 46.61 60.14   0.6601        0.5894     0.7961 6.885e-12
    
    9    7     60 44.03 46.51 61.67   0.6897        0.6055     0.8178 7.148e-12
    
    
    Analysis of Deviance Table
    
     
    
    Model 1: Status ~ 1
    
    Model 2: Status ~ Release
    
    Model 3: Status ~ Release + Upland
    
    Model 4: Status ~ Release + Upland + Migr
    
    Model 5: Status ~ Release + Upland + Migr + Mass
    
    Model 6: Status ~ Release + Upland + Migr + Mass + Indiv
    
    Model 7: Status ~ Release + Upland + Migr + Mass + Indiv + Insect
    
    Model 8: Status ~ Upland + Migr + Mass + Indiv + Insect
    
    Model 9: Status ~ Upland + Migr + Mass + Indiv + Insect + Wood
    
     
    
      Resid. Df Resid. Dev Df Deviance Pr(>Chi)   
    
    1        66     90.343                        
    
    2        65     56.130  1   34.213 4.94e-09 ***
    
    3        64     48.024  1    8.106 0.004412 **
    
    4        63     41.631  1    6.393 0.011458 * 
    
    5        62     38.643  1    2.988 0.083872 . 
    
    6        61     35.070  1    3.573 0.058721 . 
    
    7        60     30.415  1    4.655 0.030970 * 
    
    8        61     30.710 -1   -0.295 0.587066   
    
    9        60     28.031  1    2.679 0.101686


    最受欢迎的见解

    1.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)

    2.R语言多元Logistic逻辑回归 应用案例

    3.R语言面板平滑转移回归(PSTR)分析案例实现

    4.R语言回归中的Hosmer-Lemeshow拟合优度检验

    5.R语言泊松Poisson回归模型分析案例

    6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

    7.R语言如何在生存分析与Cox回归中计算IDI,NRI指标

    8.在R语言中实现Logistic逻辑回归

    9.R语言实现向量自回归VAR模型

    展开全文
  • R语言广义线性模型Logistic回归案例代码.pdf
  • 这个问题涉及马蹄蟹研究的数据。研究中的每只雌性马蹄蟹都有一只雄性螃蟹贴在她的巢穴中。这项研究调查了影响雌蟹是否有其他男性居住在她附近的...我们将首先拟合仅具有一个自变量:宽度(W)的泊松回归模型 ...

    原文链接http://tecdat.cn/?p=2605

    原文出处:拓端数据部落公众号

    这个问题涉及马蹄蟹研究的数据。研究中的每只雌性马蹄蟹都有一只雄性螃蟹贴在她的巢穴中。这项研究调查了影响雌蟹是否有其他男性居住在她附近的因素。被认为影响这一点的解释变量包括雌蟹的颜色(C),脊椎状况(S),体重(Wt)和甲壳宽度(W)。

    数据文件:crab.txt。

    我们将首先拟合仅具有一个自变量:宽度(W)的泊松回归模型

    估计的模型是:$ log(\ hat {\ mu_i})$ = -3.30476 + 0.16405W ilog(μi^) = - 3.30476 + 0.16405W

    估计的β= 0.164的ASE为0.01997,这是小的,并且该斜率在z值为8.216及其低p值的情况下在统计学上是显着的。

    如果我们看一下W对Sa的散点图(见下文),我们可能会怀疑一些异常值

    您可以考虑其他类型的残差,影响度量(如我们在线性回归中看到的)以及残差图。

    以下是运行R代码其他部分的输出的一部分:

    从上面的输出中,我们可以看到预测计数(“拟合”)和线性预测变量的值,即预期计数的对数值。

    我们也可以看到,尽管预测是有意义的,但模型并不适合。考虑到残差统计值为567.88和df为171 ,p值为零,残差统计值/ DF = 567.88 / 171 = 3.321远大于1,因此该模型不适合。缺乏适合可能是由于缺少数据,协变量或过度分散。

    更改模型

    在上述模型中,我们检测到一个潜在的过分散问题,因为比例因子,例如残差偏差的值/ DF远大于1。

    回想一下,过度分散的原因之一是异质性,其中每个协变量组合中的主体仍然差异很大。如果是这样的话,是否违背了Poisson回归模型的泊松模型的假设?

    上述R程序的输出:

    在这个模型中,随机分量在响应具有相同均值和方差的情况下不再具有泊松分布。根据给定的估计值(例如Pearson X 2 = 3.1822),随机分量的变化(响应)大约是平均值的三倍。

    除了过度分散之外,如何忽略其他解释变量?我们可以通过添加其他变量来提高拟合度吗?

    我们来比较一下这个输出和只有“W”作为预测的模型。我们将“虚拟变量”引入到模型中,以表示具有4级的颜色变量,其中4级作为参考级别。

    此外,如果您运行anova(model.disp),从下面的输出中我们可以看到,在考虑宽度后,颜色几乎没有统计上显着的预测因子。

    > anova(model.disp)
    
    Df Deviance Resid。Df Resid。Dev
    
    NULL 172 632.79
    
    W 1 64.913 171 567.88
    
    C1 1 3.130 170 564.75
    
    C2 1 5.400 169 559.35
    
    C3 1 0.004 168 559.34

    此模型是否适合数据更好,是否适合过度分散?

    R代码的这部分做以下更改:

    将此输出的部分与上面的输出相比较,我们将颜色用作分类预测器。我们这样做只是为了记住同一个变量的不同编码会给你不同的拟合和估计值。

    现在估计的模型是什么?$ \ log {\ hat {\ mu_i}} $ = -2.520 + 0.1496W - 0.1694C。logμi^ = -2.520 + 0.1496W - 0.1694C。

    由于添加协变量没有帮助,过度分散似乎是由于异质性。我们可以用这些数据做些什么吗?

    数据分组

    我们考虑按宽度分组数据,然后拟合泊松回归模型。这里是按W排序的数据。

    数据已分成8个区间,如下面的(分组)数据所示

    请注意,“NumCases”是位于特定区间内的雌性螃蟹的数量,限定了这些雌性螃蟹的背宽。“AverWt”是该分组内的平均背宽。

    更改模型

    我们还创建了一个变量lcases = log(样本),其中记录了样本数量的对数。这是输出。

    模型现在比以前更好还是更差?它显然更适合。例如,残差统计值的值/ DF现在是1.0861。

    残差分析也显示了良好的拟合度。

    我们来比较下图中的观察值和拟合值(预测值):

    我们可以拟合泊松回归模型。请注意,该模型不适合分组数据,因为与先前的模型相比,残差统计的值/ DF约为11.649。

     


    最受欢迎的见解

    1.R语言多元Logistic逻辑回归 应用案例

    2.面板平滑转移回归(PSTR)分析案例实现

    3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)

    4.R语言泊松Poisson回归模型分析案例

    5.R语言回归中的Hosmer-Lemeshow拟合优度检验

    6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

    7.在R语言中实现Logistic逻辑回归

    8.python用线性回归预测股票价格

    9.R语言如何在生存分析与Cox回归中计算IDI,NRI指标

    展开全文
  • 原创附代码数据 原创附代码数据 有问题到淘宝找大数据部落就可以了 有问题到淘宝找大数据部落就可以了 语言数据分析回归研究案例移民政策偏好是否有 R语言数据分析回归研究案例移民政策偏好是否有 R 准确的刻板印象 ...
  • R语言Logistic回归模型案例基于AER包的affair数据 目录 R语言Logistic回归模型案例基于AER包的affair数据 #数据加载及目标变量二值化 #所有特征拟合 #部分特征拟合 # 对比两个模型的统计差异性 #系数解读及...

    R语言Logistic回归模型案例基于AER包的affair数据

    目录

    R语言Logistic回归模型案例基于AER包的affair数据

    #数据加载及目标变量二值化

    展开全文
  • R语言条件Logistic回归模型案例:研究饮酒与胃癌的关系 目录 R语言条件Logistic回归模型案例:研究饮酒与胃癌的关系 #样例数据 #条件Logistic回归模型 #样例数据 id outcome exposure 1 1 1 1 0 1 2 1 ...
  • R语言Logistic逐步回归模型案例:分析与冠心病有关的危险因素 目录 R语言Logistic逐步回归模型案例:分析与冠心病有关的危险因素 #样例数据 #数据加载 #Logistic逐步回归模型构建 #样例数据 x1 x2 x3 x4...
  • 2.面板平滑转移回归(PSTR)分析案例实现 3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR) 4.R语言泊松Poisson回归模型分析案例 5.R语言回归中的Hosmer-Lemeshow拟合优度检验 6.r语言中对LASSO回归,Ridge岭...
  • R语言Logistic回归模型案例:分析吸烟、饮酒与食管癌的关系 目录 R语言Logistic回归模型案例分析吸烟、饮酒与食管癌的关系 #样例数据 #数据加载 #模型构建 #特征交互模型构建 #样例数据 y x1 x2 1 0...
  • R语言广义线性模型Logistic回归案例代码 在实际应用中,Logistic模型主要有三大用途: 1)寻找危险因素,找到某些影响因变量的"坏因素",一般可以通过优势比发现危险因素; 2)用于预测,可以预测某种...
  • 传统回归分析以点数据为研究对象,预测结果也是点数据,而真实数据往往在一定范围内变动的.基于置信度可以形成置信区间,一定程度弥补了预测值为单点的不足,但将点数据作为研究对象,以点带表某范围内的所有数据,往往...
  • R语言泊松回归模型案例基于AER包的affair数据分析 目录 R语言泊松回归模型案例基于AER包的affair数据分析 #数据加载 #全特征模型构建 #部分特征模型构建 #模型比较 #模型预测 #评估过散度 #数据加载 #...
  • R语言应用案例大全

    2019-07-22 18:50:02
    资源名称:R 语言应用案例大全资源目录:【】R语言定义【】叶明:R在工业智能中的应用【】孟生旺:R在精算中的应用【】李欣海:用R实现随机森林的分类与回归【】李舰:基于R和pentaho的全套开源BI平台的实现【】段...
  • R语言第七讲 线性回归分析案例

    千次阅读 2019-12-17 14:09:08
    ************************************************MASS是R语言自带的库******************************************************** library(MASS) #加载MASS程序包 library(ISLR) #加载ISLR程序包,确保事先...
  • R语言Logistic回归模型案例:低出生婴儿体重(列线图、校准曲线) 目录 R语言Logistic回归模型案例:低出生婴儿体重(列线图、校准曲线) #包导入 #数据加载 #数据编码 #模型构建+列线图nomogram+校准曲线...
  • 原创文章,始发自本人个人博客... ...     写在前面的话 按照正常的顺序,本文应该先讲一些线性回归的基本概念,比如什么叫线性回归,线性回规的常用解法等。但既然本文名为《从一个R语言案例学会线性回归》,那...
  • 数据集概述 使用互联网排名前1000的网站的... InEnglish:主要使用的语言是否为英语 分析过程 1. 安装ggplot2绘图包,并加载 2. 加载数据集文件top_1000_sites.tsv 在加载本地数据文件的时候,注意需要对文...
  • R语言案例分析:财政收入的多元相关与回归分析

    万次阅读 多人点赞 2016-11-15 19:01:26
    R语言案例分析:财政收入的多元相关与回归分析 数据集下载 (mvcase3.xls)中的表Case3。  y:财政收入  x1:国内生产总值  x2:能源消费总量  x3:从业人员总数  x4:全社会固定资产投资总额  ...
  • 以狗熊会二手车数据为例,利用R语言进行回归分析,涉及原始数据的清洗、描述统计分析、经典回归模型建立、异常点诊断、交叉验证等技术,附有原始数据以及R完整代码、注释。
  • R语言回归分析实例

    万次阅读 多人点赞 2017-11-08 09:33:50
    本文包含多元线性回归及逻辑回归两种算法,个人实践操作,希望能与大家一起交流分享,如有描述不当之处,欢迎并多谢指正。 #一、公共部分,加载并审核数据、...setwd("E:/R语言建模实例") #------------------------
  • R回归分析案例

    2019-11-05 16:04:07
    R学习之 回归分析案例
  • # 读取数据 data=read.csv("artificial-cover.csv") # 查看部分数据 head(data) ## tree.cover shurb.grass.cover ## 1 13.2 16.8 ## 2 17.2 21.8 ## 3 45.4 48.8 ## 4 53.6 58.7 ## 5 58.5 55.5 ## 6 ...
  • R语言泊松回归模型案例:基于robust包的Breslow癫痫数据集 目录 R语言泊松回归模型案例:基于robust包的Breslow癫痫数据集 #数据加载 #poisson模型拟合 #过散度评估 #使用链接函数quasipoisson #数据...
  • R语言回归分析2018新作,比较详细的介绍了用R进行回归分析的方方面面,书是英文版,适合有一定英语基础的,对回归分析有兴趣的同学学习。
  • 从一个R语言案例学线性回归

    千次阅读 2015-08-10 22:46:14
    线性回归简介 如下图所示,如果把自变量(也叫independent variable)和因变量(也叫dependent variable)画在二维坐标上,则每条记录对应一个点。线性回规最常见的应用场景则是用一条直线去拟和已知的点,并对...
  • ************************************************MASS是R语言自带的库********************************************************  上一篇文章介绍了简单线性回归的分析案例,接下来介绍一下多元线性回归的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,909
精华内容 2,763
关键字:

r语言的回归案例