wush978 / DataScienceAndR

R語言翻轉教室
www.datascienceandr.org
148 stars 79 forks source link

關於7: 01-RBasic-06-List-DataFrame的作業問題 #339

Closed joe188032 closed 8 years ago

joe188032 commented 8 years ago

您好,以下是我的答案:

' 這裡我們使用CO2這個資料集請同學做練習

data(CO2)

' 請問CO2 有多少列?

answer1 <- nrow(CO2)

' 請問CO2 有多少欄(column)?

answer2 <- ncol(CO2)

' 請問CO2 的各欄的名稱為何?

answer3 <- colnames(CO2)

' 請問uptake這欄的平均值為多少?

answer4 <- mean(CO2[["uptake"]])

' CO2 共有很多很多列(answer3)

' 請從CO2 中挑出一些列,滿足以下的條件:

' 這些列的uptake值,超過全部CO2"平均"的uptake值

' (answer4)

'

' 你可以先取出uptake的向量、接著拿該向量和平均值做比較、把結果的logical vector丟到[]的第一個參數

answer5 <- CO2[c(CO2[["uptake"]]>mean(CO2[["uptake"]])),]

' 請問Type有多少種類別?

' ps. answer6 應該是一個數

answer6 <- nlevels(CO2[["Type"]])

CO2[["Type"]]<-factor(CO2[["Type"]],ordered=TRUE,levels=c("Mississippi","Quebec"))

' 請問當類別為Quebec時,uptake的平均值為多少?

answer7 <- mean(CO2[CO2[["Type"]]>"Mississippi","uptake"])

' 請問當類別為Mississippi時,uptake的平均值為多少?

answer8 <- mean(CO2[CO2[["Type"]]<"Quebec","uptake"])

' 我們可以利用model.matrix來建立一個矩陣。舉例來說:

' model.matrix(~ Type + Treatment + conc, CO2)可以

' 建立一個基於Type、Treatment和conc的矩陣。

X <- model.matrix(~ Type + Treatment + conc, CO2)

' 請取出uptake的值放入y 之中

y <- CO2[["uptake"]] dim(y)<-c(84,1)

' 請利用https://en.wikipedia.org/wiki/Ordinary_least_squares#Estimation的公式,利用迴歸的演算法,

' 找出beta.hat讓 X %*% beta.hat 很靠近 y

' 請計算X %*% beta.hat 和 y 的correlation(提示:用函數cor)

beta.hat <- solve(t(X)%%X)%%(t(X)%%y) answer11 <- cor(X%%beta.hat,y)

' answer11 的平方,就是迴歸分析時常提到的:R-squared。

' 很多分析師會用這個數據來判斷這個模型好不好。

' 在R 裡面,跑迴歸分析,可以簡單用lm這個函數:

g <- lm(uptake ~ Type + Treatment + conc, CO2)

' g 這個物件就會包含我們剛剛算過得答案

' g$coef就會是beta.hat

' g$fitted.value就會是X %*% beta.hat

' summary(g)則會顯示各個參數的t 檢定,以及整個模型的R-squared

g.s <- summary(g)

' mode(g.s)顯示它是一個list。

' 請找出一個名字,answer12,讓g.s[[answer12]]就是R-squared

' 你可以參考help(summary.lm)裡面的說明。

answer12 <- "r.squared"

關於以上答案,程式的回應是: Sourcing your script...

X is wrong! Try again.

| Give it another try.

warning messages from top-level task callback 'mini' Warning messages: 1: In grepl("\n", lines, fixed = TRUE) : input string 1 is invalid in this locale 2: In grepl("\n", lines, fixed = TRUE) : input string 3 is invalid in this locale 3: In grepl("\n", lines, fixed = TRUE) : input string 5 is invalid in this locale 4: In grepl("\n", lines, fixed = TRUE) : input string 7 is invalid in this locale 5: In grepl("\n", lines, fixed = TRUE) : input string 9 is invalid in this locale

麻煩您了!!

wush978 commented 8 years ago

@joe188032 你動到CO2了:

CO2[["Type"]]<-factor(CO2[["Type"]],ordered=TRUE,levels=c("Mississippi","Quebec"))

導致你的答案不正確。

wush978 commented 8 years ago

請把程式碼改成不會動到CO2這個變數的版本,應該就有機會過了(因為時間的關係,我就沒有繼續檢查了)