- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40305 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12803
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析
; V. ]7 D, Q/ e- C7 e: p这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。9 ?5 v1 N: d5 ?' Z! Z
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ~7 m; u3 Z$ q4 [5 |, o- _6 l
行描述性统计分析,各连续型变量之间的相关关系如下:
5 Z5 J- z+ Q) E! Y w: e* s ( I1 m9 m* d5 ?! ]! |% K
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 0 ^% Q6 s0 s3 D5 q# l
![]()
" K9 m! X' p8 U5 ~ 4 J% h, U h( O3 y! [/ o5 _
最终模型残差图:
0 Y" d9 Q5 `6 K* V5 D/ X# D4 E 4 o( b, E) N3 b( u
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:' m: l' o7 F9 h6 w3 c" S7 v
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
4 m# R( N# ^! o% z属性变量的具体影响在此处分析略去。
1 C1 x% _4 ]0 E( i连续型变量的影响主要为:" x' m3 q+ K3 _8 E% z/ e
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
- }4 ^9 V6 V2 \# I! P2 a9 ^/ k9 y 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
8 l6 b9 B1 G4 D1 y. R同时,原本为连续型变量的容积率经过离散化变为属性变量后:2 `5 k2 N' W9 A5 g& Y) w; \, J
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
& ?* m( V6 V+ i/ W9 s 容积率与环线之间存在着交互效应。
# p1 m$ t$ q! k7 w zrm(list=ls()) #清空当前工作空间
1 B% Q/ A7 m v/ D4 nsetwd("D:/回归分析"), z2 O7 F& r2 P8 x/ e/ e5 E
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a z$ {2 f3 Z+ V C/ N8 V
View(a); Z, d2 |. m$ d; D9 L' a
attach(a)4 p( o' B; m5 @% L& w( h" P
names(a); K% Z# {. u6 s9 @ ]" h0 ]/ U+ O
$ S# c5 S' Z7 o
9 b; A( W z7 M" Q3 Z
##描述性统计
5 i1 N$ ^8 ~" F& _3 `) S0 W) n$ T7 U5 U: M5 E* l
2 [4 e7 ]2 I2 d: `0 k' K8 H
#未做处理的响应变量分布情况5 s3 s2 j7 t$ t5 P9 T
par(mfrow=c(1,1))& b: b5 R l7 W5 p) Q
hist(price)! m5 W( f% j8 K- Y% A2 @" I* X! K0 F
summary(price) #查看响应变量的描述统计量
% |1 ]+ \) C- |& a" c5 i. T#连续型变量描述性统计8 F o- z; G- x
windows()
( {5 [& f' N# s7 m/ L V8 Upairs(a[,c(6:10)]) #所有连续型变量间的散点图" B0 m& B" ^# @8 q J; B5 [
par(mfrow=c(2,2)) ; {7 t& G- O2 P: T/ s; X
plot(rong,price) #每个连续型因变量与响应变量间的散点图( x; A8 }0 L0 j8 A8 Y
plot(lv,price)
8 U9 a* p) f1 _2 k( X1 xplot(area,price)
4 x& a) M" r% S+ v q& Splot(ratio,price), y* _/ f. T% N
summary(a[,c(6:10)]) #查看连续型变量的描述统计量3 l7 [# ^# K* s- ]
cor(a[,c(6:10)]) #查看连续型变量的相关系数7 d6 J8 J3 U% L
#属性变量描述性统计; t% \3 H' y$ f3 W, q) P, r' n
windows()+ f3 H5 J6 a; A4 y6 F
par(mfrow=c(2,3)) . |$ g. h& Q1 b
boxplot(price~dis) #每个属性变量关于响应变量的箱型图5 M0 `9 |: v7 |+ y4 n! Q
boxplot(price~wuye) & \5 q X1 o; f3 J6 L! O- D4 T% n
boxplot(price~fitment)
) L; A' O% x4 [2 n! x# p; tboxplot(price~ring) . b( K D5 {! s3 F! O# \
boxplot(price~contype): e4 @1 E* ~% y; i( Q! ^* g" f- T
! H7 X7 y/ `7 c; t% W" m0 l8 y: j9 W& I$ P2 x! }4 l
4 U8 X6 M H( A0 R7 m5 \
$ V. e5 y$ K+ S/ [##模型建立- ?% F4 z0 H9 W n' a, b9 x9 \: }5 j
" \) i) ^2 \5 t3 |+ u
. Z! d$ F+ d3 Q. L
#在方差分析模型基础上加入连续型变量2 k9 g3 Y- Y! x4 H' K0 H
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
H$ h \% J) n% ^' z, |" ianova(lm1) #方差分析& N6 L0 w/ v0 v3 W9 b) K' c0 W. Z& g
summary(lm1) #模型参数估计等详细结果
8 |- M5 I$ X* gwindows()6 E V( d, K' _
par(mfrow=c(2,2))
: ~* q8 _3 r, `plot(lm1,which=c(1:4)) #回归诊断做残差图
& Y$ H3 K- h7 h$ r
8 Y) I# ]% v9 h6 E+ M; }3 O' w. Q9 E* S: u b! [9 I* \
' J2 }# j2 C/ f, f1 M* n. I
. B& }# H4 T' [2 j##变量处理. ?' U9 @ B+ h# {/ c: |! L
: m" E7 ?9 S3 c% h9 m$ a+ p/ I9 O" d9 J% _9 A) [$ Q/ P
###对不显著的变量采用分组的方式希望能达到显著的效果" A& a: C; N6 l i) T
##对容积率的处理
( G% D2 W- C3 H( d0 L1 N" o; Rwindows()9 i. i# `+ ]0 ~
n = 4
, \. i4 w" p8 J- t( A' Wboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
( q) k( e3 q) p6 dtable(ceiling(rong/n)) #容积率各分组下的样本数" _- t! N. I Z1 }- S( @3 w
ronggrp=1*(rong>n) #进行二分类1 l) @+ ?$ m5 U9 v: ~7 i
#ronggrp=ceiling(rong/n)
6 F/ [4 n0 R/ r5 }table(ceiling(ronggrp)) #容积率二分类下的样本数; G- ]& M N: ^% U9 J+ O
windows()( W1 D8 ]4 _+ D0 X, ~8 V
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图7 ?, C. g' R5 @+ a+ [# M! m
windows()
3 { \% D% @4 W0 ^4 d# ^/ X3 ^par(mfrow=c(1,2))2 |$ E4 j2 ?- p3 l d
boxplot(rong~ring) #容积率与环线箱型图
) c1 \0 ]3 d) y2 l sboxplot(price~ring) #房价与环线箱型图 0 I ?( k6 G5 \9 T+ a. a: X
#加入容积率分组和容积率分组*所在环线交互因子的模型
; b' v) ]6 G. 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 Y. _: m: L5 eanova(lm2) #方差分析
. F I4 R: Q asummary(lm2) #模型参数估计等详细结果
9 Y- P0 c3 X R, ?/ Z' X4 wwindows()
0 \/ z* S, _3 X+ O& epar(mfrow=c(2,2))
2 B5 P/ _* N; w# C7 splot(lm1,which=c(1:4)) #回归诊断
# O: q, m( v: G2 {+ u; z% P& `. Z# a" e, |' f4 |( i$ o
R9 }. F, p ~6 o
##对小区面积的处理 ?- F' |; D# X0 `1 C
summary(area)
* B( |) [' H- ^( H" dplot(area,price)
) |, n. ?* \0 N# z* z9 H hwindows()
! X$ X: ~1 ?: ^% S' W" E. d0 mn = 1500006 i4 ], C6 g( G- s5 h
boxplot(price~ceiling(area/n))
) z3 q4 ?: p8 @# T, z6 |2 A7 ~table(ceiling(area/n)) 8 M! Y6 V0 y7 d
areagrp=1*(area>n)
+ l) G l6 K* o* g! _, mtable(ceiling(areagrp))
+ |& ~8 O7 f' e% pboxplot(price~ceiling(areagrp)) c4 ]5 e* h+ `& U: V; a# T# d( ~) w0 e
#加入小区面积分组的模型+ M" c, V+ i: N% i+ w4 i* x, [% K
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). F2 U' K: S) X0 q& s; A c
anova(lm3) #方差分析
4 w; t4 Y" _, Y- ]% rsummary(lm3) #模型参数估计等详细结果3 e4 K- o4 b9 W a* Q8 a
windows()
7 M- I0 Z1 r+ T- d$ Apar(mfrow=c(2,2))
3 W7 q3 o, o" D1 kplot(lm3,which=c(1:4)) #回归诊断% e, j7 r7 H G5 K# T$ U2 c
4 K6 y: V3 ]' t+ D" |4 W$ j$ @
5 w; N. A5 i2 [: o2 e* k4 k( g
##变量选择; w* S4 ~! N: x f V6 `
6 s+ `' W) R; G H8 M
$ H' ^+ n! w* S: H##AIC准则下的变量选择% ^( K$ ^3 _' ^# D3 K$ c0 i3 \" C
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
; @& x9 H, [1 I' S# dsummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节# H$ G4 k& ?: E
##BIC准则下的变量选择
0 h: W- x! @# p* v7 f- B4 {7 g1 Olm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic' {7 r" J) @% p1 W/ |$ m
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
! e! k' L& a1 p1 h# {
) j# j, E ~. ]; o* z% O
! c. e0 ~( y! Z) z#选用AIC准则下的模型进行回归诊断- H I5 {. q! u+ Z) r2 [
windows(). _% X: f# c5 o9 g; A0 p# n
par(mfrow=c(2,2))9 c$ D0 M% d& R0 o6 B! L i
plot(lm4.aic,which=c(1:4))
# q u( a7 D3 k& n* U+ y9 Z
4 _( n3 w2 J: V( k
6 l/ @: _( w! f3 x Z4 f2 l1 A/ i2 ]6 o S" O& l# I+ j
+ t7 X1 J, K S' t
##数据变换 N$ T- K* q7 p8 X6 y. I
4 v9 n0 ~3 B7 r& C k% F
: K& `. ]1 X; C5 J& x. a' j& @#box-cox变换
3 M+ i& ^0 H j2 k! llibrary(MASS)0 r5 b) y* m$ s4 L( k' G* O3 t
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))$ o% ?3 E! q) B7 |/ `) P; G+ U
I=which(b$y==max(b$y)) #定位似然函数最大的位置# ?! y7 H" f1 {5 D6 X' i
lambda = b$x[I] #精确的λ值; M t# n% y. O) \7 D. U
#λ接近于0,为模型简洁性,可以直接进行对数变换 c' N( e8 E5 _4 d
logprice <- log(price)( I7 S) `8 M. A( f; y3 I3 h. o
hist(logprice)
: U5 k" C3 E% ]- t3 ?2 ~
4 w4 z1 H7 Y. {( f; x
$ A. E2 g- s7 F% Y2 h2 C5 f##最终模型与诊断
3 y! i% \, u7 u2 q% h& v9 ]( B. S2 ?% w
$ A; [/ F9 t# t: M' U7 m) ?. W
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)( X: t8 {; R1 ^' ^; n
windows()
& W' W! |9 U1 q1 Hpar(mfrow=c(2,2)); Y5 E: J" d4 h. U
plot(lm6,which=c(1:4))
7 v- {" F# f" Z2 [/ {anova(lm6)( n, ?7 n6 E% E9 f
summary(lm6)& S8 n7 X! A0 Q* \5 {9 o
: k0 r" V3 i4 x" C+ J0 S7 ]+ @9 \% C9 ^! q. }3 q: a& D. X
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
8 Q6 t4 H1 z, N* S4 X5 h z" Z, P2 k( H
9 g5 o( f& M+ p; z5 B4 U$ ~
7 E# `: M4 r: k u. H# v8 g, Z
# @ w; Q J$ A( o
|
zan
|