- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40321 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12807
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析6 X+ s! {0 G/ Y8 v6 B6 P
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。* O, ]0 I" y" Z* {
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ![]()
1 `, a8 m/ c* r4 w1 m行描述性统计分析,各连续型变量之间的相关关系如下:7 M% C' j/ Z' V0 `8 J( y$ C( U
![]()
; m4 B) v F$ i名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
/ C0 h! C$ p9 r' c![]()
0 O, [2 x0 `% k' w# F3 R ) J s; |6 Y8 D6 _& R5 k$ Y. x. U' W
最终模型残差图:6 y, q* Y/ f, t# `
![]()
! i& o! G5 i* @- x通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
, ~$ ^- W1 {' }4 F属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
8 ~8 e. S) L% B属性变量的具体影响在此处分析略去。+ o0 w6 @( L1 D/ S4 A J
连续型变量的影响主要为:
/ S, G/ P0 D9 Y- z A: r) o 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;7 d* i" J4 z" @0 F& y
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
- M; m3 ~' j; b5 ~% z同时,原本为连续型变量的容积率经过离散化变为属性变量后:
4 @4 J/ ^6 v# H$ w3 `( {/ T7 V 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
! B# \. R! \6 H 容积率与环线之间存在着交互效应。/ v2 E, G |9 u# F; \: Q1 ?3 l
rm(list=ls()) #清空当前工作空间
/ k" D! ]9 s; `% H( gsetwd("D:/回归分析")
2 b! ?0 x5 O9 F/ z$ G+ c1 Ya=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a. C( t" H+ l" Y! N$ x. u: j
View(a)
. h5 a! u7 `0 hattach(a)
2 \; C% [1 I8 A m6 Rnames(a)7 R- f: g4 O9 v1 Z# L, p! M* L
4 p( a* ?: T) I2 s: t& A1 l* Y1 Z$ Z) P: O
##描述性统计. \2 j4 A2 V6 n! F: c
0 B% P! e$ q8 ^" }# r$ Y! m% E1 {* S! g$ V5 |
#未做处理的响应变量分布情况' [4 |# c- H% k8 L
par(mfrow=c(1,1))7 \) f8 S8 @( f
hist(price)
+ S* J& k* o# Fsummary(price) #查看响应变量的描述统计量8 x- f4 n; a1 I0 {
#连续型变量描述性统计7 ^) b4 \9 ~( p! P7 m1 v5 l
windows()5 l& j( p4 P5 S2 ]0 P& G
pairs(a[,c(6:10)]) #所有连续型变量间的散点图
6 S2 ~; f% ? D3 J0 qpar(mfrow=c(2,2))
; N" A) [. J, z+ B" e5 vplot(rong,price) #每个连续型因变量与响应变量间的散点图
6 D6 i* K6 m/ f& X! yplot(lv,price)9 s, r( q! s- `6 s- r
plot(area,price)7 F9 @2 Q3 j& y4 H# B# |" [* i
plot(ratio,price); L/ K. j, N2 C( n0 x( }
summary(a[,c(6:10)]) #查看连续型变量的描述统计量0 J- |5 m4 }+ O. _/ M' m
cor(a[,c(6:10)]) #查看连续型变量的相关系数+ V# D$ Q* N3 n* p
#属性变量描述性统计
7 s3 u, y0 P& X# W, _2 H: w) `8 C: awindows()
8 n; U( ^! W0 s: w6 j" m. u! hpar(mfrow=c(2,3))
8 i' u8 y! D, F+ g; Uboxplot(price~dis) #每个属性变量关于响应变量的箱型图
) ^' G8 [# T5 W4 J6 F7 Oboxplot(price~wuye)
1 a# f1 K, z; ?7 a! uboxplot(price~fitment)
6 ]4 ~% W4 n1 R4 qboxplot(price~ring)
" A- N5 ~- \2 }( T+ xboxplot(price~contype)
6 m7 ? z+ s. B% p' M/ q9 u# H
! B9 D3 @0 P3 H1 J6 a+ N2 K: h( I: r; I- T) f9 s0 `+ B d( x
4 U$ R! m2 T% N3 ^& V
, T5 O5 W1 m* ~##模型建立- T( M- g; \/ k% ?: Q1 v
* J) G, Y4 p3 L y4 r$ v1 S
2 S* u+ \% L( p4 H, [$ Q7 w9 i1 f- s#在方差分析模型基础上加入连续型变量
: D/ q5 i8 e& L. B% F, V7 f slm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
7 ]* I$ o! r; g( E; @anova(lm1) #方差分析5 T" x* S+ Z+ k+ d
summary(lm1) #模型参数估计等详细结果1 }0 I g( g( E/ e' K* ?) c" z5 I$ `# J
windows()
5 u" [ e. l9 w- c4 V2 ?par(mfrow=c(2,2))9 _" Z/ z$ I3 v
plot(lm1,which=c(1:4)) #回归诊断做残差图# v# x) ~/ }4 c. ~/ b$ J: {- f
0 U2 X& g' ?, H" m1 |/ G
5 d! n* D9 E/ ~# U
( d; M: c i9 p G' O
$ T+ [8 g% }+ @- X. Q; ^##变量处理
/ B, j, N% ?1 q9 {
7 h# v8 V- v, Z( V1 Q' W- v: y4 Y7 X/ q% t* q/ J" u+ _6 L6 f: t
###对不显著的变量采用分组的方式希望能达到显著的效果, ], u' W2 X4 |1 M! Q
##对容积率的处理. @8 X c5 r* f$ p
windows()
p+ D/ [! N: Z5 y/ dn = 4: a# [; n/ k/ m. l! V* k
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
5 ~' f. P- S6 Wtable(ceiling(rong/n)) #容积率各分组下的样本数% \9 F ^3 O* w7 X/ M8 l; S& Y
ronggrp=1*(rong>n) #进行二分类$ q9 K* \" j+ k& C/ A, A5 @
#ronggrp=ceiling(rong/n) 7 S$ x% R) k2 r2 L7 z
table(ceiling(ronggrp)) #容积率二分类下的样本数' V+ j' l8 s' g; M. x
windows()
8 g6 K8 _+ G& {boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
9 N) N9 M3 |3 x7 a+ ewindows()2 o" t0 {5 x5 `8 y$ |* X* h5 m& P6 X) [& k
par(mfrow=c(1,2)). K' s( J: W$ _4 ~0 Q
boxplot(rong~ring) #容积率与环线箱型图
7 l) h" A7 t& X8 hboxplot(price~ring) #房价与环线箱型图 : D' T0 D7 T+ L8 J
#加入容积率分组和容积率分组*所在环线交互因子的模型+ B8 A- C3 V; z- e4 o) a
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)0 c+ c* p, V# Z! Y$ K
anova(lm2) #方差分析3 q" T: U% \" ~) \( B3 z$ M; b
summary(lm2) #模型参数估计等详细结果4 D, D& M* p. e' |% i. d
windows()
/ i+ p+ R4 v9 ?6 b- opar(mfrow=c(2,2))# u3 N2 ~2 @ o$ P# |3 F O, T
plot(lm1,which=c(1:4)) #回归诊断, w0 c6 H$ B, d" p2 b0 f8 J
" r# ]5 y- v4 _* ?
. v1 u3 L, s& R9 b% l7 c# v
##对小区面积的处理
3 n" T+ z+ m9 ^ e' h2 Osummary(area)
[4 G. j/ q+ i zplot(area,price)
7 m6 ]2 a6 P5 u1 o! swindows()8 ~- X- n w3 G8 P; f
n = 150000; `! J7 v* \9 ]9 c
boxplot(price~ceiling(area/n))
6 ^% v* `6 I5 @4 n- `% ctable(ceiling(area/n)) 8 A! U% ~# o5 Z" g% L2 E& U
areagrp=1*(area>n)
' H) r8 H7 O3 l+ k$ z8 l/ T9 ktable(ceiling(areagrp))
4 T/ O# A* v4 l: ?+ T' I* O7 gboxplot(price~ceiling(areagrp))' C" o8 ^; I1 }
#加入小区面积分组的模型$ W) k0 R6 ^7 C
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)/ L2 n# M( x' T* |& p9 ?
anova(lm3) #方差分析; d4 m, m; r1 Y2 Z( u9 h
summary(lm3) #模型参数估计等详细结果
5 e. l6 q' ^% z/ t# k3 j% M9 zwindows()" Y( Y( P4 h7 {* z' X- ?( Q: T$ m
par(mfrow=c(2,2))
. o2 c, h- l% s- A7 f; o tplot(lm3,which=c(1:4)) #回归诊断: ]3 [; b, @/ ~: ~
; Z( G# r* I# b$ V
5 s2 y; U6 C. m0 V! H##变量选择9 Y1 Q+ w& m. x9 r
& d- S9 z* C) B1 z3 a5 e6 C8 y
8 B0 @! [) b$ F; G' z9 F; u& J##AIC准则下的变量选择
9 ~8 T d/ T* N1 P& a" Qlm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic; U, q$ a% ~. R
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节5 m, J% ~! M0 k+ X. ~" n( k& ?
##BIC准则下的变量选择" q% U8 Y- g+ l/ F4 H2 G
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
5 A! {' e7 Z4 n1 [3 Wsummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节8 W2 t6 r1 @$ M
: ^. h; p' n" ?4 ]4 D# ~
0 K- L& N3 e- C5 K8 V#选用AIC准则下的模型进行回归诊断
& ]' O) `8 ^% Owindows()
& k3 e# [2 o0 N( Ppar(mfrow=c(2,2))( D3 F' U. u, Z' R {; U
plot(lm4.aic,which=c(1:4))
/ m1 W p. v' J! n! U4 S2 m
+ W9 l! _. ?" Q8 X5 @5 @
$ w4 i, k1 G0 c( J$ A3 f
! b' S6 f0 h0 P1 @+ ^& `
$ w& }+ N8 d* |8 l8 ~: B/ E##数据变换
* W7 ?1 p6 r3 H4 U* Z5 I& T6 Y3 r# k
: D# G6 z% ?" ~1 n' n" b4 d F
#box-cox变换
5 g' A$ q! f$ A3 i, Zlibrary(MASS)$ T% I+ \5 u% v+ y/ \ H' o) c
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))
9 T/ _$ O( ^. l, K4 K; LI=which(b$y==max(b$y)) #定位似然函数最大的位置
" d/ x/ e. C( b/ x! E0 ]lambda = b$x[I] #精确的λ值, ]9 E4 j7 O* n& L" J' t
#λ接近于0,为模型简洁性,可以直接进行对数变换/ z. I ?) G$ s% z
logprice <- log(price)
& I, Y7 i# l) _' Phist(logprice)
$ G6 x8 z& i7 Y. l( n5 v1 t3 V
0 H6 y$ h$ z8 r6 o6 |/ d5 t* C: d. N
##最终模型与诊断
. e" E. F, r2 F
) N( j7 \, |& k! t8 B9 ]: E. k4 L0 x( L5 g4 o% L4 m
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)+ D; _4 i9 K: o: @! D& w% q5 @
windows()
! @) y$ L! N; jpar(mfrow=c(2,2))- H8 @9 g6 V6 w6 J: l i
plot(lm6,which=c(1:4))* d" B0 G. |% U
anova(lm6), L7 m5 f, _- U3 P0 f6 n: y; i
summary(lm6)
+ {' {! e# N5 a; c8 x9 ` v& T2 w+ v D# @* B' I/ C. R5 J
3 U, U( _4 r+ T/ ?2 Z) E
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
9 M8 X2 L% G0 m) T0 r* ^! h& n2 s1 T9 i: q- S4 z' H$ M8 I( `
" a4 |5 I, w. g5 B5 e
9 _5 N" i& g$ d4 s: u7 S" w$ A, k+ k
- E m! e4 ^/ K. u) z# D |
zan
|