- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40293 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12799
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析
0 e) U" A% x' }: |! z. n这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
4 X0 n. x- j* k9 u) ]* y6 H这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ![]()
+ E% _; z) i7 C1 ^; T) a" p行描述性统计分析,各连续型变量之间的相关关系如下:( H# Z) F" y$ f% W* G/ p3 h
4 y1 _: E+ j1 c
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 ) T! Y2 Y7 z" s' {2 ^
![]()
1 `8 d. P4 a6 a& \![]()
/ W+ s; @" k* u$ X' I" B' o最终模型残差图:
! S' e* {/ |$ e1 ?4 G ) ~5 h* ^' Q: K" R
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:: Q1 O! H' V, v! B! r0 }
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比" S) |) ?- @- L! x- |; ]9 c$ h
属性变量的具体影响在此处分析略去。
) Y, o2 R( _; W. I+ P% B/ Q连续型变量的影响主要为:! }+ l9 T. `7 L0 S5 J
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;* v8 z e3 ~$ H4 B$ H( L6 j9 {
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
' ?- S& G }" Z# p同时,原本为连续型变量的容积率经过离散化变为属性变量后:
9 V9 c' `* A4 B 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
2 b' y E5 @: d- Q! x 容积率与环线之间存在着交互效应。5 L) W/ w, y, S
rm(list=ls()) #清空当前工作空间) a) c6 M* y$ v" P' R) ]2 R
setwd("D:/回归分析")& [1 @9 d; A# |/ y* {
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a
2 t3 l' a5 q9 |( g1 O1 ~. C. EView(a)2 f% N, u2 E e, `/ Q
attach(a)4 T, S7 X8 Q6 d/ `! Z6 h0 }
names(a)
! ~3 W* U6 g! ]; ]4 x8 N0 j
1 T# N2 u; \$ t/ e1 [& d, e( b, n" i) }6 [
##描述性统计' t' o& d" y/ i9 j
+ U! C# l, C) W0 A8 e
* l9 V$ Y) X2 ]& y% T- p V# |#未做处理的响应变量分布情况( w L- Y) e8 i7 @
par(mfrow=c(1,1))! C0 c1 r5 L2 S8 q
hist(price)
+ o9 r( N$ K( P! d: ssummary(price) #查看响应变量的描述统计量
% l) F5 D. t0 q) n# ]#连续型变量描述性统计
; \2 f$ V$ N& V$ `& w% R1 ywindows()4 ?- p4 A1 O# Z/ `" h8 u& W
pairs(a[,c(6:10)]) #所有连续型变量间的散点图
+ T4 o6 s0 K% _9 qpar(mfrow=c(2,2)) 4 R `4 [1 P) r7 M# k3 m5 B: o
plot(rong,price) #每个连续型因变量与响应变量间的散点图$ l% J5 K. c, ~5 `1 N; I
plot(lv,price)( j: f- U3 o- v: T
plot(area,price)
0 I5 z% [6 Q! o( e) ^plot(ratio,price)- B, U6 L' P/ W
summary(a[,c(6:10)]) #查看连续型变量的描述统计量
( d! g* S x4 _' @1 `& jcor(a[,c(6:10)]) #查看连续型变量的相关系数
( M6 X5 l/ O: I5 r0 S3 D4 b#属性变量描述性统计
/ E, f+ E- p1 h% ~: x: M Cwindows()2 S- M, Q0 ?8 C2 \4 ]" d! i
par(mfrow=c(2,3))
: C8 v2 P E* j' y1 _+ Qboxplot(price~dis) #每个属性变量关于响应变量的箱型图) @2 o: E' R6 m$ A6 A, c
boxplot(price~wuye) 8 L# {# N2 [+ P1 V- F3 N
boxplot(price~fitment)
1 E; |: f" p0 W; j3 I$ D. jboxplot(price~ring)
# H# d5 ?7 N" `5 ]' C+ |( Q8 o7 Mboxplot(price~contype). W1 B! J) _% G9 J1 w }* V
+ c) R% C+ H0 B: k) n
. D: X9 Y; x8 e/ b G
8 z& g1 K; a) G+ c) }0 |1 H$ @
1 z0 `" Z/ Q* ~ j5 j, e##模型建立; Q% F& h$ S7 b& S* t
7 j7 s; S$ v: G! G+ k$ u3 G
3 s. K* x/ M; r" K) U3 Q. a
#在方差分析模型基础上加入连续型变量1 ]9 N* P. T4 W+ F2 s/ n: T+ ~$ q
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
) }' m* c+ e1 A3 S6 c2 }* o. F3 }anova(lm1) #方差分析" z: p# V# Z* A8 A c% h* k
summary(lm1) #模型参数估计等详细结果( U" `% b( D% { l) g' i# d/ M" W7 K
windows()8 E8 g. |' i% K# {$ T/ _
par(mfrow=c(2,2))7 L" N: l6 s0 q: Y& z5 A( ?
plot(lm1,which=c(1:4)) #回归诊断做残差图
9 v: a; `; _+ [- f# [( Y* {$ R2 q8 G; r( ?, y
# t/ I8 D: c1 q7 p# o# Y! _1 F$ O4 u& U6 f; E
- |4 M5 T; Z8 V& x- I& |# b9 Q5 c0 Y
##变量处理
. K1 Z* ^2 J! `- L1 A$ U9 _' Z, U' t3 e3 H& j6 o, R
& X b. k; x3 d4 N5 i7 p, s$ v" o+ P###对不显著的变量采用分组的方式希望能达到显著的效果: M( o4 L6 F5 q- `4 r- g' z( W
##对容积率的处理
0 x% u8 v+ \/ ^windows()# z# I% F/ s/ F4 S( u" e0 m
n = 4
U' r1 U* x) r `8 @boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 ' g% c9 e3 `; e7 f) m% g4 r
table(ceiling(rong/n)) #容积率各分组下的样本数1 x E+ z" A. n- k3 u
ronggrp=1*(rong>n) #进行二分类
- ~) N# \8 u% ?$ o6 `& J B#ronggrp=ceiling(rong/n)
3 m3 T; H) x/ ^5 D' [0 n8 v& `/ vtable(ceiling(ronggrp)) #容积率二分类下的样本数# e) S. `& X8 N5 B' p
windows()
5 K; i8 c0 L# mboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
3 U2 }6 E2 w0 _ lwindows()
3 T* K; a# X# s8 E6 P- hpar(mfrow=c(1,2))5 J! ?- @6 L a$ U8 r
boxplot(rong~ring) #容积率与环线箱型图
1 f; J+ X& f" B3 U; g) g# `boxplot(price~ring) #房价与环线箱型图
' i. e- u+ x9 }#加入容积率分组和容积率分组*所在环线交互因子的模型
& m3 V* y/ X9 `0 t( x( b9 G9 Ulm2=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)2 y1 l+ s0 K/ g0 K) P5 N* ?$ w
anova(lm2) #方差分析3 c- Y$ m; g' T4 h- M3 ?
summary(lm2) #模型参数估计等详细结果
; |; P: @3 G0 W3 W7 B# Uwindows()
7 j2 x/ R7 y: h9 \) |* wpar(mfrow=c(2,2))# E0 f' y" G+ Z7 P
plot(lm1,which=c(1:4)) #回归诊断
1 X J4 N5 U4 N+ p- A
' Q5 v2 S5 j: r3 b) ]0 Q7 J, n; k
##对小区面积的处理
$ E, _$ M9 Q/ T* h5 B+ Asummary(area)' e H& }* N1 x' i
plot(area,price) f6 m \9 D* e; X T
windows()
9 \4 [# U- @% B+ n: t7 Ln = 150000
9 K4 d) d5 h% Cboxplot(price~ceiling(area/n)) 3 \0 k* K8 M3 e4 e
table(ceiling(area/n))
& t8 I, V# `8 U5 Q) D- a4 Qareagrp=1*(area>n)2 Z1 z4 a2 @; D! W1 }! \! @8 `
table(ceiling(areagrp)); X% Z/ x9 X$ q
boxplot(price~ceiling(areagrp))
]! J: c0 P! @6 Y* p#加入小区面积分组的模型! X: N( D& X# h; c3 n9 v
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), G; s( w, a- E
anova(lm3) #方差分析
6 p5 \1 ?+ x! x" z3 |6 n: usummary(lm3) #模型参数估计等详细结果
0 Y, o6 w0 G& \$ W/ Kwindows()
* w. E0 H7 Q# B; U7 npar(mfrow=c(2,2))
; C) d, \0 f3 o6 e" p. V" _7 r5 I( z) lplot(lm3,which=c(1:4)) #回归诊断 ?" s v0 S3 m! ]
, r8 I% i) P7 g" F
( `( w2 x V A##变量选择
: I, @0 s4 p; o/ H4 i/ s
1 m5 P2 }* ]- m) x! C {
; @; H. }1 A+ L+ c0 o##AIC准则下的变量选择# v& k' K2 x/ \
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic$ t2 J1 z9 D! I. F) i
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节) N" m3 K9 t( K; n. ^4 F( u
##BIC准则下的变量选择
, S) f: x, e" \- R" xlm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
. Q+ X: k4 u9 [# ]; b$ dsummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
& x; x8 x0 W1 V7 A
5 I) q8 m9 B7 w6 `' y0 p% d0 [, D, G- O7 M' [- v& i
#选用AIC准则下的模型进行回归诊断
, `1 J7 R2 C: X5 O& Lwindows()
2 w: r ?1 B6 l) Apar(mfrow=c(2,2))" _/ L$ D9 E6 W
plot(lm4.aic,which=c(1:4))
% l5 v+ r# ^6 X3 M9 A: o; P6 r( i( V a3 X. g8 q, r
: d7 R4 }" I- ]* _% ~) b
0 j/ R1 w( H4 R) p" m. v6 P& B& Q, e* i% D
##数据变换" e6 x7 E0 Y5 G, r+ {5 _" m
# L' C8 ^% q' t; h) F
, I0 r! s- @% H1 t: J' L1 {" n#box-cox变换
( U/ u( ?: w, |4 }6 A. S5 k. m% rlibrary(MASS)
9 M( A! w' t/ s3 k, mb=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))
" F! M& q+ K: x6 N' c' pI=which(b$y==max(b$y)) #定位似然函数最大的位置2 p$ e& q! j& _8 E& e
lambda = b$x[I] #精确的λ值
8 T8 b: \. Y5 j/ O1 d( E#λ接近于0,为模型简洁性,可以直接进行对数变换
- q2 k& W9 j0 Z+ ologprice <- log(price)3 }1 ]5 d x( H; `; K
hist(logprice)
% k$ ?% A! Z) \% t* M0 a. |$ e8 v; u
; j7 n3 M2 P! x7 U. w- w; I##最终模型与诊断
/ U# ^% J' ^9 B! @. d/ V, U0 z6 v6 |8 N
4 G6 D* z8 S1 M" n
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
2 L S: C6 R- S) C6 I4 Nwindows()5 J4 b7 t0 K* r, j. J" y
par(mfrow=c(2,2))/ Z5 q$ m i) ]- P
plot(lm6,which=c(1:4)): o! \. n4 K* P4 r+ ]* r
anova(lm6)
+ y# d" S6 H) Ysummary(lm6)0 j# c7 A2 @% k9 X7 D8 ~8 g
+ H0 m& p. t. [7 s5 k" K; ]. J
2 \! B" W4 H8 K# r8 U" Y0 l请关注数学中国网微博和数学中国公众号,联系QQ 32437105602 }0 L0 ~1 K x- _; e% x; s+ K
`* k1 c \' n6 G1 @7 Z; _
3 H+ k9 u6 Z4 E* u9 P4 p3 [$ n6 x2 x7 h# D D
5 n6 u. b) J: K$ v! ? |
zan
|