Den här inlämningsuppgiften förutsätter att följande paket finns installerade:
mosaic
dplyr
geosphere
leaflet
Paket kan installeras via kommandot install.packages('packagename'), där 'packagename' är namnet på paketet, t.ex 'mosaic'.
Introduktion
I den första inlämningsuppgiften ska ni självständigt i grupper om tre analysera ett dataset i programmeringsspråket R. Till skillnad från datorlaborationerna finns det minimalt med kodexempel. Datorlaborationerna går igenom de flesta momenten som behandlas i inlämningsuppgiften, så se till att göra klart dessa innan.
Instruktioner
I denna inlämningsuppgift ska ni analysera ett datamaterial som beskriver ca 500 distrikt i Boston år 1970. Datasetet är en modifierad version1 av originaldata2 som användes i en studie3 där författarna predikterade medianhuspriser i olika distrikt med hjälp av en rad förklaringsvariabler.
Följande variabler finns i datasetet boston_census_data.Rdata (ladda ner), som innehåller 480 observationer. Notera att en observation motsvarar ett distrikt:
zoned_25k_p: Andel av stadsdelens bostadsmark ämnad för marklotter större än 25000 kvadratfot.
indust_p: Andel tunnland ägd av företag utanför detaljhandel.
borders_charles: Charles River dummy variabel (= 1 om området gränsar till floden, 0 annars).
NOx: Koncentration av kväveoxider (andelar per 10 miljon).
n_rooms_avg: Genomsnitt antal rum i ägda bostäder.
before_1940_p: Andel ägda bostäder byggda före 1940.
employ_dist: Viktat avstånd till fem arbetsförmedlingscentra i Boston.
radial_access: Index som mäter tillgång till stadsmotorvägar.
tax_rate: Fastighetsskatt per 10000 USD.
pupil_teacher_ratio: Lärartäthet mätt som elev per lärare.
lower_stat_pct: Procentandel med låg socioekonomisk status i termer av utbildning eller arbete.
dist_fenway_park: Avstånd till stadion Fenway Park.
Inlämningsuppgiften ska lämnas in i form av ett html-dokument genererat av Quarto. Kontrollera att ni inte får några felmeddelande när du genererar HTML-dokumentet. Läs sedan igenom HTML-dokumentet noggrant innan ni lämnar in det. Använd tydliga figurer och namnge axlarna med tydliga variabelnamn. Glöm inte att skriva era namn i början av dokumentet, där det nu står Namn 1, Namn 2 och Namn 3.
0. Ladda in data
# laddar in paket:library(mosaic)
Registered S3 method overwritten by 'mosaic':
method from
fortify.SpatialPolygonsDataFrame ggplot2
The 'mosaic' package masks several functions from core packages in order to add
additional features. The original behavior of these functions should not be affected by this.
Attaching package: 'mosaic'
The following objects are masked from 'package:dplyr':
count, do, tally
The following object is masked from 'package:Matrix':
mean
The following object is masked from 'package:ggplot2':
stat
The following objects are masked from 'package:stats':
binom.test, cor, cor.test, cov, fivenum, IQR, median, prop.test,
quantile, sd, t.test, var
The following objects are masked from 'package:base':
max, mean, min, prod, range, sample, sum
library(dplyr)library(geosphere)
The legacy packages maptools, rgdal, and rgeos, underpinning the sp package,
which was just loaded, will retire in October 2023.
Please refer to R-spatial evolution reports for details, especially
https://r-spatial.org/r/2023/05/15/evolution4.html.
It may be desirable to make the sf package available;
package maintainers should consider adding sf to Suggests:.
The sp package is now running under evolution status 2
(status 2 uses the sf package in place of rgdal)
library(leaflet)
💪 Uppgift 0.1
Ladda in datasetet Boston_census_data med följande kod.
Uppgift 0.1 - Svar
# Write your code hereload(file =url("https://github.com/StatisticsSU/SDA1/blob/main/assignments/assignment1/Boston_census_data.RData?raw=true"))
1. Kriminalitet i Boston
I detta avsnitt ska ni analysera kriminaliteten i Boston med hjälp av variabeln crime_rate.
💪 Uppgift 1.1
Vad kan man generellt säga om kriminaliteten i Boston 1970? Använd lämpliga figurer och mått för att ge en beskrivning.
Uppgift 1.1 - Svar
Skriv svaret här. Vid behov skrivs matematiska symboler inom dollartecken, till exempel \(\overline{y} = \cfrac{\sum^{n}_{i=1} y_i}{n}\). Koden skrivs i R-rutan nedanför.
# Write your code here# Write your code here#Vi använder favstats för att får ut numeriska beskrivningar för "crime:rate". favstats(~ crime_rate, data = Boston_census_data)
min Q1 median Q3 max mean sd n missing
0.00632 0.0829725 0.253715 3.681942 88.9762 3.66526 8.746156 480 0
# Nahant hade det längsta värde på 0.00632, Q1 var på 0.0829725, medianen ligger på 0.253715, Q3 ligger på 3.681942 och Boston Charlestown hade det högsta värde på 88.9762. #Låddiagram beskriver vår mått på ett lämpligt sätt, men vi behöver tranformera med logaritmera vårt mått, eftersom högsta värde på "crimat" har stora skillnade från medianen, värde blir någon sätt missvissande. y <-c(0.00632, 0.0829725, 0.253715 , 3.681942, 3.66526 , 8.746156, 88.9762 ) #Skapa en vektorlogy <-log(y)print(round(logy, 3)) # Skriv ut den logaritmerade vektorn,
[1] -5.064 -2.489 -1.372 1.303 1.299 2.169 4.488
# Värde på (y) efter har logarimera vårt värde: -5.064 -2.489 -1.372 1.303 1.299 2.169 4.488boxplot(logy) # Gör en boxplot av y med mosaic-paketet
💪 Uppgift 1.2
Distrikten tillhör olika stadsdelar som anges i den kategoriska variabeln town? Det finns 88 olika sådana stadsdelar (towns).
Skiljer sig brottsligheten åt mellan de olika stadsdelarna? Undersök stadsdelarna Boston East Boston, Boston Downtown, Cambridge, samt ytterligare en stadsdel som ni själva väljer. Besvara frågan med hjälp av lämpligt valda figurer och statistiska mått.
Tip
Innan ni påbörjar analysen, skapa en ny data frame som enbart innehåller de stadsdelar som ni vill jämföra. Det kan göras till exempel med funktionen filter().
Uppgift 1.2 - Svar
Skriv svaret här.
# Write your code here#Skapa en ny data frame som innehåller stadsdelar vi vill jämföra. Det ytterligare stadsdel vi väljer är "Boston Charlestown".suppressMessages(library(dplyr))Boston_census_data_new <-filter(Boston_census_data, town =="Boston East Boston"|town =="Boston Downtown"|town =="Cambridge"|town =="Boston Charlestown")# Får fram "crime_rate" numeriska mått till våra statsdelar(town).favstats(~ crime_rate | town, data = Boston_census_data_new)
town min Q1 median Q3 max mean
1 Boston Charlestown 9.82349 15.932675 18.73790 22.638425 88.9762 29.201948
2 Boston Downtown 7.40389 13.525800 16.62465 22.701100 51.1358 20.895349
3 Boston East Boston 5.29305 8.111925 12.95580 17.630075 24.3938 13.605003
4 Cambridge 1.12658 1.442845 2.27138 2.448818 4.0974 2.172814
sd n missing
1 29.6426668 6 0
2 13.7822237 8 0
3 6.4193740 12 0
4 0.7706757 26 0
#Vi använder låddiagram, där vi kan ser tydlig skillnad mellan olika statsdelar. boxplot(crime_rate ~ town, data = Boston_census_data_new)
💪 Uppgift 1.3
Vilka två variabler i datasetet Boston_census_data korrelerar mest med brottslighet? Beskriv sambandet mellan brottslighet och var och en av dessa två variabler.
Tip
Kom ihåg att korrelation mäter det linjära sambandet mellan numeriska variabler.
Uppgift 1.3 - Svar
Skriv svaret här.
# Write your code here# Det är svårt att direkt inse vilka två numeriska variabler som korrelera mest med brottslighet. Vad vi kan göra är att skapar ett spriddningdiagram med brottsligheten sedan räkna deras korrelation.# Vid detta fall bör brottslighet var responsvariabeln och de andra variabler är förklaringsvariabeln.plot(crime_rate ~median_home_value , data= Boston_census_data, col ="darkblue")
plot(crime_rate ~zoned_25k_p , data= Boston_census_data, col ="darkblue")
plot(crime_rate ~tax_rate , data= Boston_census_data, col ="darkblue")
plot(crime_rate ~pupil_teacher_ratio , data= Boston_census_data, col ="darkblue")
plot(crime_rate ~lower_stat_pct , data= Boston_census_data, col ="darkblue")
plot(crime_rate ~indust_p , data= Boston_census_data, col ="darkblue")
plot(crime_rate ~borders_charles , data= Boston_census_data, col ="darkblue")
plot(crime_rate ~NOx , data= Boston_census_data, col ="darkblue")
plot(crime_rate ~n_rooms_avg , data= Boston_census_data, col ="darkblue")
plot(crime_rate ~before_1940_p , data= Boston_census_data, col ="darkblue")
plot(crime_rate ~employ_dist , data= Boston_census_data, col ="darkblue")
plot(crime_rate ~radial_access , data= Boston_census_data, col ="darkblue")
plot(crime_rate ~dist_fenway_park , data= Boston_census_data, col ="darkblue")
# Utifrån spridningsdiagramet ser vi att varibaler "medianhuspriset" och "procentandel med låg socioekonomisk status i termer av utbildning eller arbete" har det starkast samband med "brottsligheten" att göra, jämför med de andra variablerna.
suppressMessages(library(mosaic))load(file =url("https://github.com/StatisticsSU/SDA1/blob/main/assignments/assignment1/Boston_census_data.RData?raw=true")) # Vi räkna korrelartionen "brottsligheten" med "medianhuspriset" och "procentandel med låg socioekonomisk status i termer av utbildning eller arbete"cor(crime_rate~median_home_value, data=Boston_census_data)
#Korrelation mellan "brottsligheten" och "medianhuspriset" är negativ r= -0.4496238, och korrelation mellan "brottsligheten" och "procentandel med låg socioekonomisk status i termer av utbildning eller arbete" är svag positiv= 0.4637251.
2. Fastighetsskatt i Boston
I detta avsnitt ska ni analysera fastighetsskatten i Boston med hjälp av variabeln tax_rate.
💪 Uppgift 2.1
Vad kan man generellt säga om fastighetsskatten i distrikten? Använd lämpliga figurer och mått för att beskriva fördelningen.
Uppgift 2.1 - Svar
Skriv svaret här.
# Write your code herefavstats(~ tax_rate, data = Boston_census_data)
min Q1 median Q3 max mean sd n missing
187 280.75 330 666 711 409.3271 168.5777 480 0
# "Duxbury" betala det lägsta fastighetsskatten på 187 , "Chelsea" betalar högsta fastighetsskatt som är 711. Q1 är 280.75,median ligger 330, Q3 är 666 och mean är medelvärde ligger på 409.3.boxplot(Boston_census_data$tax_rate)
💪 Uppgift 2.2
Låt oss skapa en ny variabel cat_tax som anger om ett distrikt betalar låg (low), medel (medium), eller hög (high) fastighetsskatt. Vi definerar skattekategorierna enligt
low: tax_rate\(\leq\) 250,
medium: 250 \(<\)tax_rate\(\leq\) 400,
high: tax_rate\(>\) 400.
Följande kod skapar och lägger till variabeln cat_tax i Boston_census_data
Boston_census_data$cat_tax <-cut(Boston_census_data$tax_rate, breaks=c(0, 250, 400, 800),labels=c('Low', 'Medium', 'High'))# Finns det ett samband mellan vilken skattekategori man tillhör och ens angränsning till Charles River?# Variabeln heter: borders_charlesbargraph(~cat_tax | borders_charles, data = Boston_census_data, type ="proportion")
# 1 om området angränsar till Charles River och 0 om det inte gör det.# Ens cat_tax och ens angränsning till floden Charles är rätt så lika varanndra på alla staplar. # "Low" stapel är lite högre på nej sidan än den på ja sidan. Samma sak gäller för "high" stapeln. # Endast "medium" stapel på ja sidan är högre än den på nej sidan. # Det tyder på att genereltt sätt så förändras ens tax rate lite om man bor nära floden charles.
Finns det ett samband mellan vilken skattekategori ett distrikt tillhör och dess angränsning till Charles River? Förklara med hjälp av lämplig tabell och figur.
💪 Uppgift 2.3
Hur många procent av alla distrikt i vår data ligger i angränsning till Charles River och tillhör en hög skattekategori? Hur stor andel av distrikten med hög skatt ligger inte i angränsning till Charles River?
Uppgift 2.3 - Svar
Skriv svaret här.
# Write your code herebargraph(~cat_tax | borders_charles, data = Boston_census_data, type ="percent")
# 35% har en hög fastighetsskatt och bor nära floden Charles. 40% av de med en hög fastighetsskatt bor INTE nära floden Charles.# Man måste kunna få exakta siffror på något sätt.
💪 Uppgift 2.4
Vilka två variabler i datasetet Boston_census_data korrelerar starkast med tax_rate? Beskriv det parvisa sambandet mellan tax_rate och var och en av dessa två variabler. Vad kan vi säga om kausalitet för vart och ett av sambanden?
Tip
Kom ihåg att korrelation är ett mått på linjära samband mellan numeriska variabler.
Uppgift 2.4 - Svar
Skriv svaret här.
# Write your code here# 2.4 - Skapa en korrelationsmatrix med de relevanta variablerna.Boston_11_variables <- Boston_census_data[, c("median_home_value", "crime_rate", "zoned_25k_p", "indust_p", "NOx","employ_dist", "radial_access", "tax_rate", "pupil_teacher_ratio", "lower_stat_pct", "dist_fenway_park")]head(Boston_11_variables)
#För enklare avläsning av korrelationen används en corrplot# De två variabler som korrelerar starkast med tax_rate är radial_access och indust_p. # Det parvisa sambanden är:# och vi kan säga att kausaliteten för vart och en av sambanden är:
3. Avstånd till Fenway park
I detta avsnitt ska ni undersöka variabeln dist_fenway_park, som mäter avståndet mellan ett distrikt och Fenway park (stadion där basebollslaget Boston Red Sox spelar sina hemmamatcher).
Vi kan visualisera Fenway park och distrikten på en karta med hjälp av R-paketet leaflet. Följande kod visar platsen för Fenway park och distrikten för observationerna 30 och 45.
library(leaflet) # Install if not availablefenway_park_lat_long <-c(42.346462, -71.097250) # latitude and longitude for Fenway_parkBoston_map <-leaflet() %>%addTiles() %>%addMarkers(lat = fenway_park_lat_long[1], lng = fenway_park_lat_long[2], popup="Fenway park") %>%addMarkers(lat = Boston_census_data$latitude[30], lng = Boston_census_data$longitude[30], popup="Observation 30") %>%addMarkers(lat = Boston_census_data$latitude[45], lng = Boston_census_data$longitude[45], popup="Observation 45") Boston_map # Show interactive map
💪 Uppgift 3.1
Vilket distrikt i vår data har längst respektive kortast avstånd till Fenway park? Markera ut dessa distrikt i en interaktiv karta tillsammans med Fenway park.
Uppgift 3.1 - Svar
Skriv svaret här.
# Write your code herefavstats(~ dist_fenway_park, data = Boston_census_data)
min Q1 median Q3 max mean sd n missing
887.9007 6127.044 8063.461 12365.27 33638.4 9589.095 5219.896 480 0
#Willingtown rad 143 kortaste avstånd#Marshfield rad 25 har längsta avstånd
library(leaflet) # Install if not availablefenway_park_lat_long <-c(42.346462, -71.097250) # latitude and longitude for Fenway_parkBoston_map <-leaflet() %>%addTiles() %>%addMarkers(lat = fenway_park_lat_long[1], lng = fenway_park_lat_long[2], popup="Fenway park") %>%addMarkers(lat = Boston_census_data$latitude[42.3362], lng = Boston_census_data$longitude[--71.090], popup="Observation 1") %>%addMarkers(lat = Boston_census_data$latitude[42.0590], lng = Boston_census_data$longitude[-70.8100], popup="Observation 2") Boston_map # Show interactive map
💪 Uppgift 3.2
Finns det ett samband mellan dist_fenway_park och crime_rate?
suppressMessages(library(mosaic))load(file =url("https://github.com/StatisticsSU/SDA1/blob/main/assignments/assignment1/Boston_census_data.RData?raw=true"))cor(crime_rate ~ dist_fenway_park, data = Boston_census_data)
[1] -0.1228651
#Korrelationen mellan "dist_fenwaypark" och "crime_rate" är r=-0.1228651, så jag skulle inte tolka det som att de har något stort samband.
4. Enkel linjär regression
I detta avsnitt ska ni anpassa och tolka enkla linjära regressionsmodeller.
💪 Uppgift 4.1
Anpassa en linjär regression med responsvariabeln NOx och den förklarande variabeln employ_dist. Rita den anpassade regressionslinjen tillsammans med data i en lämplig figur. Beskriv resultaten och tolka modellen. Utför en modellvalidering via en residualanalys och kommentera modellens lämplighet. Om modellen inte anses lämplig, vilka antaganden har inte varit uppfyllda?
Uppgift 4.1 - Svar
Skriv svaret här.
# Write your code here
💪 Uppgift 4.2
Använd modellen i Uppgift 4.1 för att prediktera koncentration av kväveoxider för observation 10, där employ_dist=10.5857. Beräkna vad residualen blir för denna observation.
Uppgift 4.2 - Svar
Skriv svaret här.
# Write your code here
💪 Uppgift 4.3
Transformera variablerna i Uppgift 4.1 (avgör själv vilken eller vilka av de två som behöver transformeras). Ett förslag är att använda Tukeys cirkel för att hitta lämpliga transformationer. Anpassa en ny linjär regression med de transformerade variablerna. Utför en modellvalidering (efter transformation) via en residualanalys och kommentera modellens lämplighet jämfört med modellen i Uppgift 4.1.
Uppgift 4.3 - Svar
Skriv svaret här.
# Write your code here
💪 Uppgift 4.4
Plotta den anpassade regressionen från 4.3 i icke-transformerad skala tillsammans med observationerna (också i icke-transformerad skala) i en lämplig figur.
Uppgift 4.4 - Svar
Skriv svaret här.
# Write your code here
💪 Uppgift 4.5
Använd modellen i Uppgift 4.3 för att prediktera koncentration av kväveoxider i icke-transformerad skala för observation 10, där employ_dist=10.5857. Beräkna vad residualen blir för denna observation. Kommentera resultaten jämfört med Uppgift 4.2.
Tip
Tänk på att ta hänsyn till eventuella transformationer!
Uppgift 4.5 - Svar
Skriv svaret här.
# Write your code here
5. Multipel linjär regression
I detta avsnitt ska ni studera multipel linjära regression.
💪 Uppgift 5.1
Anpassa en linjär regression med responsvariabel logaritmerad median_home_value samt förklarande variabler lower_stat_pct och dummy-variabeln borders_charles. Tolka koefficienten för borders_charles.
Uppgift 5.1 - Svar
Skriv svaret här.
# Write your code here
💪 Uppgift 5.2
Ni ska nu utforma en modell som predikterar medianhuspriset median_home_value. Ni får endast använda följande förklaringsvariabler:
before_1940_p
crime_rate
radial_access
NOx
dist_fenway_park
Ni får själva välja hur många av variablerna som ska ingå i modellen. Ni får göra vilka transformationer ni vill av variablerna, inklusive responsvariabeln.
Pröva er fram metodiskt när ni väljer vilka variabler ni inkluderar i modellen, och när ni bestämmer vilka eventuella transformationer ni använder.
När ni utvärderar olika modeller kan ni förslagsvis börja med att jämföra adjusted R-squared. När ni med hjälp av adjusted R-squared har identifierat två eller tre modeller som ser lovande ut kan ni utvärdera dessa modeller ytterligare i ett andra steg.
I det andra steget ska ni utvärdera hur väl modellerna predikterar data som inte använts för att anpassa modellen. Ni kan välja en av två alternativa metoder:
Dela in ert dataset i träningsdata och testdata. Anpassa modellen med hjälp av träningsdata, och utvärdera sedan på testdata. Ni kan exempelvis använda de första 350 observationerna som träningsdata och de sista 130 observationerna som testdata.
Använd korsvalidering. Det är en något mer krävande metod, men också något bättre. Ni kan exempelvis göra korsvalidering med 4 folds (4-fold cross validation). Dela då upp ert dataset i fyra delar (del 1: observationer 1-120, del 2: observationer 121-240, del 3: observationer 241-360, del 4: observationer 361-480).
Sortera inte observationerna i Boston_census_data slumpmässigt. Ordningen är redan slumpmässig.
Tip
Tänk på att ta hänsyn till eventuell transformation av responsvariabeln. Om ni exempelvis har valt transformationen \(\log(y)\) är modellens prediktion av responsvariabeln \(\widehat{\log(y)}\). Ni måste då transformera den till \(\hat y\) i responsvariabelns originalskala med formeln \(\hat{y}=\exp\left(\widehat{\log(y)}\right)\). Sedan kan ni räkna ut residualen \(y - \hat y\).
Uppgift 5.2 - Svar
Skriv svaret här.
# Write your code here
💪 Uppgift 5.3
Gör en residualanalys av den valda modellen i Uppgift 5.2.
Uppgift 5.3 - Svar
Skriv svaret här.
# Write your code here
💪 Uppgift 5.4
Använd modellen i Uppgift 5.2 för att prediktera medianhuspriset för observationerna i datasetet Boston_districts_to_predict (ladda ner).
Uppgift 5.4 - Ladda hem data för prediktion
Ladda in dataseten Boston_districts_to_predict med följande kod.
# Write your code hereload(file =url("https://github.com/StatisticsSU/SDA1/blob/main/assignments/assignment1/Boston_districts_to_predict.RData?raw=true"))
Det här datasetet har endast de förklarande variablerna, dvs inte responsvariabeln. När vi rättar era inlämningsuppgifter kommer vi att jämföra era prediktioner med de faktiska medianpriserna (som vi har tillgång till).
Skriv ut dina prediktioner så att vi enkelt kan se dem när vi rättar.
Tip
Tänk på att ta hänsyn till eventuella transformationer av förklaringsvariablerna!
Uppgift 5.4 - Svar
Skriv svaret här.
# Write your code here
Ztext/plainUUTF-8
Footnotes
Totalundersökningen trunkerade medianhusvärdet till 50K för de censusdistrikten som låg över. Vi har tagit bort dessa censusdistrikt. Vi har också tagit bort variabler som är irrelevanta.↩︎
Harrison Jr, D., & Rubinfeld, D. L. (1978). Hedonic housing prices and the demand for clean air. Journal of Environmental Economics and Management, 5(1), 81-102.↩︎
Pace, R. K., & Gilley, O. W. (1997). Using the spatial configuration of the data to improve estimation. The Journal of Real Estate Finance and Economics, 14(3), 333-340.↩︎