- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40245 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12785
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析$ m3 D2 l3 i! A% Z
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。0 m3 K/ Q% A# v& ]: M$ D, t
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: 6 H; X7 B% m1 V1 w* E6 x
行描述性统计分析,各连续型变量之间的相关关系如下:
# v) T: W' t0 g; C6 r# F; F" s9 w : q! U) f8 x9 I9 U/ p7 t D4 i
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 . o) r+ |/ P. E j# W; C$ `
$ I% S- o0 k# o: d
9 V9 L2 F6 c u" b- T" H
最终模型残差图:7 W$ H. ^& [% c0 d$ D
![]()
2 f- N1 N5 _/ n+ x6 v通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
7 p$ T% M: K' Q0 t* l# x1 T属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
# p6 b1 g, h5 b属性变量的具体影响在此处分析略去。3 g/ b2 T, D/ a, T; p6 o+ [6 ?* u
连续型变量的影响主要为:
/ A* O6 G1 O$ S8 }+ F7 [: T 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
* n; |9 E2 {8 T- }. e- J 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;& i$ O8 f. m) q* c1 b! p# l
同时,原本为连续型变量的容积率经过离散化变为属性变量后:
6 K" W8 W7 A6 u' V- H 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
+ E8 F8 k4 y+ z2 F. u6 } 容积率与环线之间存在着交互效应。$ w& p2 B* |8 x a
rm(list=ls()) #清空当前工作空间+ k% t$ i3 {' A0 ?( H
setwd("D:/回归分析")
: D- E+ |( [& {( x3 F: Pa=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a3 o- H' `4 C. Q4 Q
View(a)' x; \" F. g {1 a8 q1 x
attach(a)4 h/ u. W1 V# k8 J% q3 X& ?8 f
names(a)6 z9 x: W& E- t: `" s# c- X) ~
0 h& l' I: L, K% u- E' w- p, w. U
( Z: U# ^8 \! C% ?5 b; O
##描述性统计
8 X& E: |0 s7 @' O7 Z% A0 m3 J. }+ \% t
. n% H, X- e y# g/ f
#未做处理的响应变量分布情况
1 f$ V6 {5 j) E2 F9 ^2 J4 Bpar(mfrow=c(1,1))
z9 X+ ]3 O; v( w* Whist(price). R$ _# }9 s5 h
summary(price) #查看响应变量的描述统计量" r9 s+ S& a) C0 E5 c& M3 f
#连续型变量描述性统计0 M; J2 k: [8 x( H) ]6 G! c( M
windows()
5 J4 m3 N: W% T- _8 Zpairs(a[,c(6:10)]) #所有连续型变量间的散点图
9 p; t5 x; r( @6 Vpar(mfrow=c(2,2)) , @. B8 |4 @) a$ v: E9 C- [
plot(rong,price) #每个连续型因变量与响应变量间的散点图, Z' Y# L( d" R1 F+ h
plot(lv,price)
* q& K, l% s! D; p$ Xplot(area,price)
* g# u. X: N/ [* Lplot(ratio,price)
% J* ~9 s0 y! }summary(a[,c(6:10)]) #查看连续型变量的描述统计量) p! c1 e" y+ Q6 p' e" g
cor(a[,c(6:10)]) #查看连续型变量的相关系数, ~# n% @7 E& L& ~
#属性变量描述性统计- t$ `* }( a! j/ R1 \
windows()6 ^* K/ E5 v$ ^/ j, L4 x
par(mfrow=c(2,3)) . S2 H4 `% _! @( V; F* l* r
boxplot(price~dis) #每个属性变量关于响应变量的箱型图
6 o2 c- }8 m# H2 j( Vboxplot(price~wuye)
% B! q( n" s4 K( \boxplot(price~fitment)
0 D7 R5 t* i+ @( Q, Z' V1 }/ c- eboxplot(price~ring) ' l2 t) ?0 F9 H: F- _! P, n/ f% u
boxplot(price~contype)5 V3 ?! m9 [5 J3 ]6 v: U5 _% l7 m
! u% F: _8 i* L' X
4 u8 e5 e# t, k) N8 {7 G% e
' M: ~; a1 y1 C% N$ O6 p3 z" L
$ P! M+ N. B- h* z0 F+ z+ E$ O##模型建立: ^9 n0 c! v4 C' ~ n: W
" \' P* D' i7 o2 B' \ q2 N
* ~" V; S4 Z( K1 }1 Y, r. d! z#在方差分析模型基础上加入连续型变量
0 z6 } V( p- \, @: E1 Zlm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)1 v9 ~/ ]1 m! F* e4 Y2 g% \
anova(lm1) #方差分析
3 z4 t$ {' Z( H- w7 N: [" {0 S8 psummary(lm1) #模型参数估计等详细结果2 S- Y ^9 M+ a: W' ?
windows()
7 A- m: x8 w% C5 m! hpar(mfrow=c(2,2))
3 l- _* c2 R! \% D, qplot(lm1,which=c(1:4)) #回归诊断做残差图
2 `" U8 v" R( u Z8 Y- E" q9 _& G0 }; f2 y7 |) @
7 g' k4 C6 w" Y. c u, `! ^$ T" Y
' d7 v0 N4 h! e6 [7 [
! ?: C' w# L. c% t! T& e; M##变量处理
+ a2 v) e/ o7 b$ U% X' N! f7 _# a5 [- E4 ?0 ^+ i7 {0 G1 u
' `! d5 m! W6 h/ T# h( J
###对不显著的变量采用分组的方式希望能达到显著的效果+ ]$ g- A* F2 K9 E* B
##对容积率的处理! L" C- U. o$ P
windows()
! n# p/ U4 E1 R( z* X2 t+ n3 P7 sn = 4/ n N9 B& Y/ }' J; e
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 # M& {2 i ~; w- h8 q8 ~$ X
table(ceiling(rong/n)) #容积率各分组下的样本数; `7 s0 a4 U6 i q
ronggrp=1*(rong>n) #进行二分类- d- D- f# p$ M: k
#ronggrp=ceiling(rong/n) / ^7 U- s+ S" p# K4 ]$ [/ `: q
table(ceiling(ronggrp)) #容积率二分类下的样本数# R! e/ l' {1 [, M
windows()
' i# z5 L$ M, \, J7 @8 ]boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
6 z( M; U% ]/ h/ S$ R5 c* bwindows()9 L! {: d& B+ I' @: i
par(mfrow=c(1,2))4 i' y" B! E0 I8 K6 x$ u3 m0 `
boxplot(rong~ring) #容积率与环线箱型图
, `& [8 ?5 N0 g: ~boxplot(price~ring) #房价与环线箱型图
1 j& l' y0 `" o6 F! y6 P#加入容积率分组和容积率分组*所在环线交互因子的模型) z9 X- E' e/ J; O; @# [* V
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)& Q" I) w3 C/ X; c
anova(lm2) #方差分析
9 Z' u; H! X+ J W7 s4 Usummary(lm2) #模型参数估计等详细结果
( D5 k: b' _, i4 h, q9 ?% Rwindows()
& X+ d+ A8 K1 z" y6 ]par(mfrow=c(2,2))
: M2 t8 i3 s' t# K8 B' ]+ tplot(lm1,which=c(1:4)) #回归诊断' y( l0 L' @+ [8 K. O& V
! _8 _; m3 q0 Q7 R. G6 h# k$ l* W7 A) ^% O1 j+ I8 b
##对小区面积的处理: K& d! O8 Q- n, c% J" ^6 D
summary(area)
; m8 ^' {4 D& mplot(area,price)4 [% E+ p; U5 W2 ]
windows()5 H% s9 G0 b+ {* }" i
n = 1500009 x* L/ A% K5 c% c2 G' @
boxplot(price~ceiling(area/n))
' j+ a! c" _3 [table(ceiling(area/n)) & |# ?1 y/ ]; ^& n: B& a
areagrp=1*(area>n)
. Y2 U5 K" ]: N0 v6 a! n( }table(ceiling(areagrp))" F: g2 ^5 |( n# G1 i! J7 u
boxplot(price~ceiling(areagrp))* h0 Y8 E) j" }: P
#加入小区面积分组的模型6 b2 ^ k* P) r
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)( H' l1 J, l# L$ \
anova(lm3) #方差分析7 n. ]* f& i; e) c
summary(lm3) #模型参数估计等详细结果
) ?0 y3 g: k. D! Iwindows()
% a. j* {! k" ~/ @7 r# r, w0 kpar(mfrow=c(2,2)), f- C$ y; Y# {) R# e k1 t
plot(lm3,which=c(1:4)) #回归诊断9 r( y# z7 A/ a& y9 A. z) x
4 n* z- o# G. q/ _$ Y7 ~/ c
3 s" f% g' B- h/ K& l! U# `, N##变量选择
& ~* s/ N/ A3 R1 C4 }- q6 x& E/ W$ j2 W* {
9 l$ g/ }: g5 h. t##AIC准则下的变量选择
+ p+ N) x7 K, y0 [+ ^0 Xlm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic, d! Y" r. M) `5 l! ^8 ~# j
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
9 s; L& i! ]7 S5 w7 w##BIC准则下的变量选择
$ S) w7 a4 S1 z% K# G2 J/ vlm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
1 P9 u1 S Y/ L Z. ]) K2 g; b: ]summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节6 K- }9 }- F! N, k. y" P8 t
/ X5 J: m( O/ S8 s0 D) L* [5 r8 y! f6 V2 m# D y% g# s
#选用AIC准则下的模型进行回归诊断/ r6 N% i' |7 P* f/ U5 C
windows()
* S3 p/ w% v+ M; ^( ?! Epar(mfrow=c(2,2))* B; M5 \8 _5 n0 I
plot(lm4.aic,which=c(1:4)) 4 Z4 D& ?7 d$ f w) D o5 p C
5 _5 z( Q8 i5 i
5 `' E7 @1 `/ K6 h3 ~( g* t% b. |& }7 b/ a3 T
' \: L- M. O2 ?$ E1 G
##数据变换, [/ w/ J4 L9 o0 s& b; k# J0 Q: i
. \, s9 J+ Q$ Q; I' X' P: N7 R
" A' z% k9 _1 n#box-cox变换/ c. Y2 ~* [2 u$ Z; e, x
library(MASS)7 d; j# N# H" m( d
b=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))! a& ^( o6 m) {) A$ u0 W4 K
I=which(b$y==max(b$y)) #定位似然函数最大的位置
- S) T E; q( l8 y4 [4 ?lambda = b$x[I] #精确的λ值
( m* f) w7 |! q/ z#λ接近于0,为模型简洁性,可以直接进行对数变换- v+ ]% H& V+ F
logprice <- log(price)2 C8 k6 v+ v! r X2 U) P. \' ?
hist(logprice)
& i& c. m& z- o8 \/ v7 W6 q0 L$ o; O8 D4 ~
( n( I' J g* e9 ~
##最终模型与诊断
' l2 h, F2 V# K" f4 b5 D8 u% P. p2 y3 z2 Z# U3 R1 h
6 C" ^' |! r: @* i3 _lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio) M+ b5 f) U5 j! _# c+ h' z7 |( A- T
windows()4 p# G/ O2 U( H, D6 d5 r
par(mfrow=c(2,2))$ u* q) k* s/ f; U3 Q; s! F2 t
plot(lm6,which=c(1:4))7 n# h3 Y4 a! P# X h4 ?4 t" Z0 o' `; b
anova(lm6)# a. f# D" J! E8 s2 s. X+ p- |& a
summary(lm6)
, u' F+ W7 w+ r% _4 l2 B- j9 M
9 T3 \9 m3 C+ P1 ]5 d0 ]3 {: Q% a* y, r+ V: E
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
3 K, F8 ]# X" r H; z$ h8 j/ W$ p
. V4 ?3 u# M+ t* J) v3 N- A: ]. @8 N3 `
3 b X5 @( W* V
* N/ b0 y {% ~/ r) Q* ] |
zan
|