- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40100 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12741
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析. R4 y/ z1 `' j9 A! j. A; J* J
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。( I4 N3 l h* n4 L5 z0 v- X
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ![]()
! X ~5 G( H3 a% d# ?行描述性统计分析,各连续型变量之间的相关关系如下:
8 a8 e1 q9 T# H) D! G![]()
: h: w0 H5 A& Q" C1 z; }1 d0 M% h名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
2 x% f, N- {7 f6 b \; N9 n } 9 o' a! l' }1 k/ y8 {) z8 U
![]()
! H* h! a- j) ]最终模型残差图:
/ J# P" G+ J8 P# V+ w" u![]()
. ^$ F6 @- S& y% ?) B) i通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:- p5 T0 Y: Z' i
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
! ^+ C' M/ _7 x* ]8 \属性变量的具体影响在此处分析略去。
. R- O2 r) t$ d7 _! Y连续型变量的影响主要为:
% y4 h V' X4 _) r' _9 G 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;) I7 k' x% x- ]5 h. s9 r
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
0 O: f1 l; C' p同时,原本为连续型变量的容积率经过离散化变为属性变量后:$ o$ O( q6 `6 B- K/ d# J6 y3 d
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
% B- [, m, o f; c' b 容积率与环线之间存在着交互效应。( p( `5 O6 \7 l. v# k8 \
rm(list=ls()) #清空当前工作空间
' \# [: A8 d; b) k. Fsetwd("D:/回归分析")
" l; h" L* P% S A" Ja=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a" c$ j- N& s U* w5 |- A. ?1 o4 @ c
View(a)7 Z3 q' q1 {* y: k+ k
attach(a)0 A$ P i& u8 }* D; ~: K+ E; a
names(a)8 x6 N* w* N% W K
9 U; s# [$ V: m, C- K* b2 r$ l2 F
( Q! `% A. h$ ~+ T3 G##描述性统计5 ?' c9 q/ R; H: I' }5 [" N" Y
1 h9 q2 E3 J- G8 M+ m6 e/ R2 W V; k+ v7 c
#未做处理的响应变量分布情况
* o7 H8 x5 j0 ]5 E# e3 zpar(mfrow=c(1,1))
6 T7 \% E6 e& }7 R; khist(price), `) c# N; p) Y- L( `
summary(price) #查看响应变量的描述统计量- }5 [& n* e- ?! }& |
#连续型变量描述性统计
" H4 ~" M! h s( v7 wwindows()% N5 o. K$ M4 ~& ^# w% z
pairs(a[,c(6:10)]) #所有连续型变量间的散点图
7 D @6 f$ n5 C5 B! [par(mfrow=c(2,2)) 2 e8 i1 h9 ]7 t+ U
plot(rong,price) #每个连续型因变量与响应变量间的散点图
$ U1 T/ M$ U4 v4 G- r& b# wplot(lv,price)
$ N$ p! b3 G& U" |3 Jplot(area,price)) ^9 l. _* ^+ U5 W4 z3 k
plot(ratio,price)
6 m# `$ @9 T3 C2 z; Qsummary(a[,c(6:10)]) #查看连续型变量的描述统计量$ q4 C# _) E( X* @$ d' ^6 `
cor(a[,c(6:10)]) #查看连续型变量的相关系数# q' ~# F! g# b+ O+ |4 H& _: j
#属性变量描述性统计
4 f5 y3 s, g; Wwindows()* H$ K5 V6 b$ g
par(mfrow=c(2,3))
4 I( J4 \7 r$ u% F% r- `boxplot(price~dis) #每个属性变量关于响应变量的箱型图
- e2 y/ ?1 E: P# S. kboxplot(price~wuye)
1 ]2 `8 y3 N' W {8 uboxplot(price~fitment)
8 y$ ?2 o3 d, iboxplot(price~ring) ! l& E; H2 v: h$ s
boxplot(price~contype)
/ u4 V. F- R% ?& l) A! s& U
+ @& s g9 Q( O7 `
# F/ g+ b- K0 _* X' q: _4 x* M: t7 c* K7 U: E. ~1 `
# q/ m3 b, D8 n
##模型建立( _8 V4 S C' Q8 f& M
+ [) J9 @) a5 A, v7 q. `; q) G' t
' `: v1 ]/ i" q6 c0 B. @1 ^
#在方差分析模型基础上加入连续型变量: {; ?3 F2 Q' H
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
1 {3 [7 C$ p4 f3 Janova(lm1) #方差分析
5 [% t( V* P. x/ Y$ V! ssummary(lm1) #模型参数估计等详细结果& y* c; |# I' Z& E: y+ }) N: ]
windows()1 t+ d, h4 Y3 [5 F' ?/ C
par(mfrow=c(2,2))$ P. B# S0 c& a: |0 d! A q& x3 d
plot(lm1,which=c(1:4)) #回归诊断做残差图- B7 `; |3 \8 m& E: J5 V! ^
; f3 q/ Q8 H2 S: _, V8 Y
. o3 I& ~1 A& N, e8 B' O6 q) _3 V
6 L9 U. t5 _7 G( M+ P5 L
; m( i: L, ^) n* z/ ~
##变量处理" @8 ~: o4 r' C5 D# n5 F
/ E5 ^5 F+ c3 z4 A
Z7 P# ]" D5 Q. G" `& ~9 F###对不显著的变量采用分组的方式希望能达到显著的效果
3 `$ r, t/ y, p( H- _$ z" h' ~##对容积率的处理. N& w! V V( }& V; X4 d
windows()
, k9 v3 L% d$ L3 w* Rn = 4
/ f5 O* ~) U. ?% L4 Z- ^0 m( Z* b( Bboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 2 x4 e' ]; `. P8 }8 z6 O/ w
table(ceiling(rong/n)) #容积率各分组下的样本数
0 r3 H6 a# S9 d. D: P* r' A, Lronggrp=1*(rong>n) #进行二分类
% a( ]$ `$ T5 U8 U3 Q#ronggrp=ceiling(rong/n) , V' u8 u* l6 H# k1 ~
table(ceiling(ronggrp)) #容积率二分类下的样本数
9 N* _' @( B# d, ?windows(), _1 @# {( |# A; d7 k; W: t
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
0 f/ e0 D6 S7 S7 @6 I( dwindows()
2 r- Z1 d7 m4 a) q- P+ |, S$ Apar(mfrow=c(1,2))9 B% j; W" e* J& r2 g( Y4 ], ~
boxplot(rong~ring) #容积率与环线箱型图3 C8 f- N9 f5 K) n7 o4 E8 n
boxplot(price~ring) #房价与环线箱型图
0 j# Z) t( j! D) Y#加入容积率分组和容积率分组*所在环线交互因子的模型# F! J' f1 y: Z" P' F9 ~! }8 {
lm2=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+as.factor(ring)*as.factor(ronggrp)+lv+area+ratio)
# }; }- N( |' E }- wanova(lm2) #方差分析, P# q3 J( X, B% u1 H4 v8 _: s0 W6 |" u# }3 P
summary(lm2) #模型参数估计等详细结果) d" ~+ W, b( y5 A" s, Y* p; r ?
windows()& z% S2 w, |& b; D! \
par(mfrow=c(2,2))
) w' q6 l) g( M. t6 Jplot(lm1,which=c(1:4)) #回归诊断
3 O. l: z8 K0 x# G s) x/ A7 v0 P/ [0 _9 @: e" P' ]) s3 u
' ^3 i9 y/ I/ i' I( B
##对小区面积的处理
1 X- J# r _/ [- x' T( Dsummary(area)
& b9 E! O [3 q* ~$ ?6 ~plot(area,price)5 i; A. \9 e [$ {
windows()
0 U o4 B& F7 W, xn = 150000
, m* _' d" j# ]# ?! yboxplot(price~ceiling(area/n)) " i& v0 i/ @5 L
table(ceiling(area/n)) - Q$ m' j9 L9 n- V. ]/ G# Q) G
areagrp=1*(area>n)7 l1 t# [, j& T; ~* o7 |8 q
table(ceiling(areagrp))4 o6 g6 D6 w/ e
boxplot(price~ceiling(areagrp))
" T. t* ^- T: z; T0 n( N#加入小区面积分组的模型& h( _% ?' M f1 T4 Z, R" j6 @
lm3=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+as.factor(ring)*as.factor(ronggrp)+lv+as.factor(areagrp)+ratio)5 |) o2 n8 o5 s7 W3 X8 u" [
anova(lm3) #方差分析
4 I1 i' q! A; D$ V% X. i2 p* Csummary(lm3) #模型参数估计等详细结果" s- |, k* ]/ ?" i
windows()7 B v2 F; m+ [- p* ^" u! b. u1 Q
par(mfrow=c(2,2))
8 H; U3 | y2 L, m7 w5 g Wplot(lm3,which=c(1:4)) #回归诊断
: T9 Z5 m8 l. [8 k" L$ j' o: u& `$ n3 g% y' i8 P, y
) E+ m1 ~( {4 e# W4 `
##变量选择
5 i6 I) q" A4 G7 c0 L2 I6 k7 v+ W2 S/ n
3 z; v5 G4 {3 R
##AIC准则下的变量选择2 \4 A- B- R% z1 L8 K7 b; m
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
$ S+ q# ~9 u4 k0 m: s2 J( ]summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
$ H( x x% P: ?3 e* y. h+ s8 R##BIC准则下的变量选择* Q* ^# f& ^ N% l; _
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic, X- }- i- |8 H% @
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节2 R" j9 V0 ?5 L
1 j; Q2 G2 h; G" ?$ ~! C
: u* I+ o5 K2 f8 V: \4 s
#选用AIC准则下的模型进行回归诊断
2 `% G2 T, R, I; A6 R* \' Dwindows()
1 x' d+ w: o* @- N: ]4 b9 f9 _par(mfrow=c(2,2))$ O# }" i& {: S# F# T1 }6 h1 C @8 [' `
plot(lm4.aic,which=c(1:4))
: O/ a( i4 A6 U9 Y! a* c
! m) {! T9 e3 Z4 {4 c% i2 l9 T K" k7 Q8 T$ P& J" o" S2 }( w+ R
2 Z) m$ f& {( i6 R% E
1 p' q o+ }: Q& @; D1 V
##数据变换7 q7 W2 C1 v/ Y. s% X
2 \' m/ H' d5 ^9 F& t$ I5 }4 W+ s, P
- T* H. n8 Z! T, h8 P# ] F3 E#box-cox变换& r6 l/ G& K% j1 S
library(MASS)
# G% e s- a$ J- yb=boxcox(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio, data=a,lambda=seq(-3, 3, by=0.1))8 b# _2 ~' f Y; K" ]+ r
I=which(b$y==max(b$y)) #定位似然函数最大的位置1 p% o7 h7 m) U7 T2 I# m0 O1 u' N
lambda = b$x[I] #精确的λ值
1 \. g. F0 m0 c2 _; W( p6 C#λ接近于0,为模型简洁性,可以直接进行对数变换
" k8 @$ _4 Z# |6 B3 L8 ^logprice <- log(price)
' L' Y% [) z$ K" I) y% _" J& ^hist(logprice)/ a' D* o6 O5 X5 i
8 o& N. T5 {+ X
! ]4 a4 m8 `4 O
##最终模型与诊断
$ {! x* v+ ^6 M1 K% Q. S3 P
' o" @" D4 t" l9 d
5 ?2 g, E) L) f7 `! r* Glm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
7 @2 {; F3 s: F2 ^windows()# O/ X1 f/ p3 I
par(mfrow=c(2,2))* @) d) y; K( \6 E# i4 p1 f- O0 f
plot(lm6,which=c(1:4))
0 O7 ]; H( k6 |, S4 y* `anova(lm6)5 e" c" s# K* M/ J
summary(lm6)" R( J4 p/ e. E% I: P
( w; ]+ S! T! @9 ]" e' O: t
& t# j. `9 W: X/ a5 o/ |请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
8 O6 ]( D; L7 q7 b& q% T" {8 A3 x( z: a
8 n: q- s' W) K7 W3 j2 i& B+ f3 G
+ K' L, g4 b, w& g1 {
/ q7 b9 H: P" K" t/ ? |
zan
|