R for SAS and SPSS Users

8. Programming Language Basics

8.1 Simple Calculations

> 2+3

간단한 계산 = 5

> 1:50

1에서 50까지의 정수 표시

> options(width=40)

> 1:50

최대 컬럼수를 조절하고 1:50까지의 정수 표시

> x <- 2
> y <- 3
> x + y
> x * y

x에 2를 할당, y에 3을 할당, 2 + 3 = 5, 2 * 3 = 6

8.2 Data Structure

vectors, factors, data frames, matrices, arrays, lists

8.2.1 Vectors

> workshop <- c(1,2,1,2,1,2,1,2)

벡터를 만들어 workshop 변수에 저장

c함수는 원소를 합쳐 벡터를 만드는 함수

> mode(workshop)

모든 값이 숫자이므로 mode는 numeric

만일 하나의 원소라도 문자라면workshop의 mode는 charanter

> workshop

workshop이 담고 있는 자료 표시

> gender <- c("f", "f", "f", NA, "m", "m", "m", "m")

> mode(gender)
> gender

mode가 character인 vector 만들기, mode 확인, 자료 확인

NA는 Not Available를 의미하는 것으로, missing value

> q1 <- c(1,2,2,3,4,5,5,4)
> q2 <- c(1,1,2,1,5,4,3,5)
> q3 <- c(5,4,4,NA,2,5,4,5)
> q4 <- c(1,1,3,3,4,5,4,5)
q1, q2, q3, q4 vector 자료 입력

> table(workshop)
workshop
1 2
4 4

workshop의 빈도 분석, 1이 4개, 2가 4개

> table(gender)
gender
f m
3 4

gender의 빈도 분석, f가 3개, m이 4개

> mean(q3)
q3의 평균 구하기, 그러나 missing value때문에 못 구함

> mean(q3, na.rm = TRUE)

missing value를 remove하고 평균 구함

8.2.2 Factors

> workshop <- c(1,2,1,2,1,2,1,2)
> workshop <- factor(workshop,
levels = c(1,2,3,4),
labels = c("R","SAS","SPSS","STATA"))
workshop과 gender는 분류변수

분류변수는factor data structure사용

일반적으로 자료를 입력하고 factor함수를 이용하여 변환

factor 함수 인자 1) 변환할 벡터 2) 벡터가 가질 수 있는 값 또는 수준 3) 각 수준에 대한 이름

> table(workshop)
workshop
R SAS SPSS STATA
4 4 0 0
factor data structure에 대한 빈도 분석

> gender <- factor(gender)

> gender

간단한 변환과 factro data structure인 gender 확인

> gender <- factor(gender,
levels = c("m", "f"),
labels = c("Male", "Female"))
> gender
factor data structure에 label주기

8.2.3 Data Frames

SAS dataset과 동일한 R의 data structure는 data frame

R에서는 열을vector라 부르고, 행을 observation, case 아니면 그냥 row라 부름

data frame은 문자 및 숫자 컬럼을 가질 수 있는 일반화된 matrix임

data frame은 길이가 같은 원소를 가진 list의 특별한 형태

> mydata <- data.frame(workshop,gender,q1,q2,q3,q4)
> mydata
factor, vector를 이용하여 data frame data structure 만들기

> mydata <- data.frame(workshop,sex=gender,q1,q2,q3,q4)

data frame을 만들 때 gender vector의 이름을 sex로 변경

> row.names(mydata)

관측치의 이름, 여기서는 연속 숫자 표시

8.2.4 Matrices

행렬은 2차원 자료

모든 자료는 같은 mode(즉 all numeric, all character, all logical)

> mymatrix <- cbind(q1, q2, q3, q4)
> mymatrix
q1 ~ q4 vector를 합쳐 행렬로 만들기

cbind 함수는 벡터를 합쳐 행렬로 만드는 함수

> dim(mymatrix)

행렬의 차원 알아내기

> mymatrix <- matrix(
c(1, 1, 5, 1,
2, 1, 4, 1,
2, 2, 4, 3,
3, 1,NA, 3,
4, 5, 2, 4,
5, 4, 5, 5,
5, 3, 4, 4,
4, 5, 5, 5),
nrow = 8,
ncol = 4,
byrow = TRUE)
> mymatrix

vector를 만들지 않고, matrix란 함수를 이용하여 행렬만들기

matrix 함수의 4가지 인자 1) 자료 2) 행수 3) 열수 4) 행단위로 읽기


> table(mymatrix)

mymatrix에 대한 빈도분석


> mean(mymatrix, na.rm = TRUE)

mymatrix에 대한 평균 구하기


cor(mymatrix, use = "pairwise")

mymatrix 열 사이의 상관 구하기

> mydata <- data.frame(workshop, gender, mymatrix)

벡터와 행렬을 이용해서 data frame 만들기

8.2.5 Arrays

어레이는 행렬이 3차원으로 되어 있는 것

8.2.6 Lists

list는 list를 포함하여 다른 어떤 data structure도 정할 수 있는 자료 구조

원소하나를 component라고 함

> mylist <- list(workshop, gender, q1, q2, q3, q4, mymatrix)
벡터, 행렬 등을 이용하여 list 자료 구조 만들기

각 component를 구분하기 위하여 [[]]를 사용

8.3 Saving Your Work So Far

> ls()
> objects()

지금까지 만든 자료 객체 전체를 표시

> rm(x, y, workshop, gender, q1, q2, q3, q4)

열거한 자료 개체를 삭제

> getwd()

현재 working directory 확인


> setwd("c:/temp")

working directory 변경

> save.image(file = "myWorkspace.RData")
작업 공간에 있는 모든 객체를 저장

R을 종료하고 다시 실행했을 때

> load("C:\\Temp\\myWorkspace.RData")
> ls()
저장한 객체를 로드하고, 로드한 객체를 확인

8.4 Comments to Document Your Programs

#를 사용하여 코멘트 처리

8.5 Controlling Functions(Procedures)

8.5.1 Controlling Functions with Arguments

8.5.2 Controlling Functions with Formulas

중요한 인자의 형태가 formula

모델링하는 함수의 첫째 인자

8.5.3 Controlling Functions with Object's Calss

객체는 mode와 class라는 attribute를 가지고 있음

> workshop <- c(1,2,1,2,1,2,1,2)
> mode(workshop)
> class(workshop)

> summary(workshop)

workshop 벡터의 mode는 numeric, class는 numeric

summary함수는 최소, 사분위수, 평균, 최대값 등을 구함

> workshop <- factor(workshop,
levels = c(1,2,3,4),
labels = c("R","SAS","SPSS","STATA"))
> mode(workshop)
> class(workshop)

> summary(workshop)

workshop 팩터의 mode는 numeric, class는 factor

summary 함수는 빈도 분석 실시

> methods(summary)

methods함수는 summary 함수가 객체의 class에 따라서 어떻게 내부적으로 동작하는 지를 보여줌

summary(mydata)라고 명령했을 때 mydata의 class가 data frame이면 summary.data.frame함수가 동작한다는 의미

Modes and classes of various R objects

=====================================

object Mode Class

=====================================

Numeric vectornumericnumeric

Character vectorcharacter character

Factornumeric factor

Data framelist data.frame

Listlist list

Numeric matrixnumeric matrix

Character matrixcharacter matrix

List created by lm listlm

Table created by tablenumerictable

======================================

8.5.4 Controlling Functions with Extractor Functions - ODS, OMS

> myModel <- lm(q4 ~ q1 + q2 + q3, data = mydata)

회귀 분석 결과를 myModel에 저장


> class(myModel)

myModel의 class가 lm으로 선형모형분석에 의한 list라는 것을 알 수 있음

> summary(myModel)

myModel에 대한 간략한 정보

> anova(myModel)

분산 분석 결과


> plot(myModel)

플로팅 결과


> predict(myModel)

예측치 결과

> resid(myModel)
잔차

SAS와 SPSS에서는 결과를 보는 방법에 프로시저에 따라 달랐지만 R에서는 동일함

8.5.5 How Much Output Is There?

output을 저장하고 함수를 이용하여 output을 검색

> print(myModel)

간략한 결과 출력

> mode(myModel)

> class(myModel)

mode가 list이고, class가 lm인 것을 확인

> names(myModel)

myModel에 있는 객체의 이름을 출력

> print(unclass(myModel))

myModel에 있는 모든 정보 출력

> myModel$coefficients

myModel의 coefficients 정보만 출력

> class(myModel$coefficients)

myModel$coefficients의 class가 numeric임을 출력(numeric vector)

> barplot(myModel$coefficients)

myModel$coefficients자료를 이용하여 barplot(막대그래프)출력

8.5.6 Writing Your Own Functions(Macros)

> myvar <- c(1:5)

# A bad function
> mystat1 <- function(x)
{
mean(x, na.rm = TRUE)
sd(x, na.rm = TRUE)
}
> mystat1(myvar)

평균과 표준편차를 동시에 구하는 함수를 만들고 사용. 그러나 표준편차만 출력

> mystat2 <- function(x)
{
print(mean(x, na.rm = TRUE))
print(sd(x, na.rm = TRUE))
}
> mystat2(myvar)

평균과 표준편차를 출력하는 함수

> mystat3 <- function(x)
{
mymean <- mean(x, na.rm = TRUE)
mysd <- sd(x, na.rm = TRUE)
c(mean=mymean, sd=mysd)
}
> mystat3(myvar)

평균과 표준편차를 구하여 벡터로 저장하는 함수


> mymeansd <- mystat3(myvar)
> mymeansd

결과를 변수를 저장(결과를 이용가능)하고, 출력

> mystat4 <- function(x)
{
myinput <- x
mymean <- mean(x, na.rm = TRUE)
mysd <- sd(x, na.rm = TRUE)
list(data=myinput, mean=mymean, sd=mysd)
}
> mystat4(myvar)

입력자료, 평균, 표준편차를 list로 저장하고 출력하는 함수


> myStatlist <- mystat4(myvar)
> myStatlist$data

함수를 이용하여 결과를 변수에 저장하고, 리스트의 특정 component만 출력

> mystat4
함수의 내용(소스) 확인

R Source


# 8.1 Simple Calculation

2+3
1:50
options(width=40)
1:50
x <- 2
y <- 3
x + y
x * y

# 8.2 Data Structures
# 8.2.1 Vectors

workshop <- c(1,2,1,2,1,2,1,2)
mode(workshop)
workshop

gender <- c("f", "f", "f", NA, "m", "m", "m", "m")
mode(gender)
gender

q1 <- c(1,2,2,3,4,5,5,4)
q2 <- c(1,1,2,1,5,4,3,5)
q3 <- c(5,4,4,NA,2,5,4,5)
q4 <- c(1,1,3,3,4,5,4,5)

table(workshop)
table(gender)

mean(q3)
mean(q3, na.rm = TRUE)

# 8.2.2 Factors

workshop <- c(1,2,1,2,1,2,1,2)
workshop <- factor(workshop,
levels = c(1,2,3,4),
labels = c("R","SAS","SPSS","STATA"))
table(workshop)

gender <- factor(gender)
gender

gender <- factor(gender,
levels = c("m", "f"),
labels = c("Male", "Female"))
gender

# 8.2.3 Data Frames

mydata <- data.frame(workshop,gender,q1,q2,q3,q4)
mydata
row.names(mydata)


# 8.2.4 Matrices

mymatrix <- matrix(
c(1, 1, 5, 1,
2, 1, 4, 1,
2, 2, 4, 3,
3, 1,NA, 3,
4, 5, 2, 4,
5, 4, 5, 5,
5, 3, 4, 4,
4, 5, 5, 5),
nrow = 8,
ncol = 4,
byrow = TRUE)
mymatrix

mymatrix <- cbind(q1, q2, q3, q4)
mymatrix

dim(mymatrix)
table(mymatrix)
mean(mymatrix, na.rm = TRUE)
cor(mymatrix, use = "pairwise")

mydata <- data.frame(workshop, gender, mymatrix)
mydata

# 8.2.5 Arrays

# 8.2.5 Lists

mylist <- list(workshop, gender, q1, q2, q3, q4, mymatrix)
mylist

# 8.3

ls()
objects()

rm(x, y, workshop, gender, q1, q2, q3, q4)
ls()

getwd()
setwd("c:/temp")
getwd()

save.image(file = "myWorkspace.RData")

load("C:\\Temp\\myWorkspace.RData")
ls()

# 8.4 Comments to Document Your Programs

# 8.5 Controlling Functions(Procedures)

# 8.5.1 Controlling Functions with Arguments

# 8.5.2 Controlling Functions with Formulas

# 8.5.3 Controlling Functions with Object's Calss

workshop <- c(1,2,1,2,1,2,1,2)
mode(workshop)
class(workshop)
summary(workshop)

workshop <- factor(workshop,
levels = c(1,2,3,4),
labels = c("R","SAS","SPSS","STATA"))
mode(workshop)
class(workshop)
summary(workshop)

methods(summary)

# 8.5.4 Controlling Functions with Extractor Functions - ODS, OMS

myModel <- lm(q4 ~ q1 + q2 + q3, data = mydata)
class(myModel)
summary(myModel)
anova(myModel)
plot(myModel)
predict(myModel)
resid(myModel)

# 8.5.5 How Much Output Is There?
print(myModel)
mode(myModel)
class(myModel)
names(myModel)
print(unclass(myModel))
myModel$coefficients
class(myModel$coefficients)
barplot(myModel$coefficients)

# 8.5.6 Writing Your Own Functions(Macros)

myvar <- c(1:5)

# A bad function
mystat1 <- function(x)
{
mean(x, na.rm = TRUE)
sd(x, na.rm = TRUE)
}
mystat1(myvar)

mystat2 <- function(x)
{
print(mean(x, na.rm = TRUE))
print(sd(x, na.rm = TRUE))
}
mystat2(myvar)

mystat3 <- function(x)
{
mymean <- mean(x, na.rm = TRUE)
mysd <- sd(x, na.rm = TRUE)
c(mean=mymean, sd=mysd)
}
mystat3(myvar)
mymeansd <- mystat3(myvar)
mymeansd

mystat4 <- function(x)
{
myinput <- x
mymean <- mean(x, na.rm = TRUE)
mysd <- sd(x, na.rm = TRUE)
list(data=myinput, mean=mymean, sd=mysd)
}
mystat4(myvar)
myStatlist <- mystat4(myvar)
myStatlist$data

mystat4


실행 결과

> # 8.1 Simple Calculation
>
> 2+3
[1] 5
> 1:50
[1] 1 2 3 4 5 6 7 8 9 10 11 12
[13] 13 14 15 16 17 18 19 20 21 22 23 24
[25] 25 26 27 28 29 30 31 32 33 34 35 36
[37] 37 38 39 40 41 42 43 44 45 46 47 48
[49] 49 50
> options(width=40)
> 1:50
[1] 1 2 3 4 5 6 7 8 9 10 11 12
[13] 13 14 15 16 17 18 19 20 21 22 23 24
[25] 25 26 27 28 29 30 31 32 33 34 35 36
[37] 37 38 39 40 41 42 43 44 45 46 47 48
[49] 49 50
> x <- 2
> y <- 3
> x + y
[1] 5
> x * y
[1] 6
>
> # 8.2 Data Structures
> # 8.2.1 Vectors
>
> workshop <- c(1,2,1,2,1,2,1,2)
> mode(workshop)
[1] "numeric"
> workshop
[1] 1 2 1 2 1 2 1 2
>
> gender <- c("f", "f", "f", NA, "m", "m", "m", "m")
> mode(gender)
[1] "character"
> gender
[1] "f" "f" "f" NA "m" "m" "m" "m"
>
> q1 <- c(1,2,2,3,4,5,5,4)
> q2 <- c(1,1,2,1,5,4,3,5)
> q3 <- c(5,4,4,NA,2,5,4,5)
> q4 <- c(1,1,3,3,4,5,4,5)
>
> table(workshop)
workshop
1 2
4 4
> table(gender)
gender
f m
3 4
>
> mean(q3)
[1] NA
> mean(q3, na.rm = TRUE)
[1] 4.142857
>
> # 8.2.2 Factors
>
> workshop <- c(1,2,1,2,1,2,1,2)
> workshop <- factor(workshop,
+ levels = c(1,2,3,4),
+ labels = c("R","SAS","SPSS","STATA"))
> table(workshop)
workshop
R SAS SPSS STATA
4 4 0 0
>
> gender <- factor(gender)
> gender
[1] f f f <NA> m m m
[8] m
Levels: f m
>
> gender <- factor(gender,
+ levels = c("m", "f"),
+ labels = c("Male", "Female"))
> gender
[1] Female Female Female <NA> Male
[6] Male Male Male
Levels: Male Female
>
> # 8.2.3 Data Frames
>
> mydata <- data.frame(workshop,gender,q1,q2,q3,q4)
> mydata
workshop gender q1 q2 q3 q4
1 R Female 1 1 5 1
2 SAS Female 2 1 4 1
3 R Female 2 2 4 3
4 SAS <NA> 3 1 NA 3
5 R Male 4 5 2 4
6 SAS Male 5 4 5 5
7 R Male 5 3 4 4
8 SAS Male 4 5 5 5
> row.names(mydata)
[1] "1" "2" "3" "4" "5" "6" "7" "8"
>
>
> # 8.2.4 Matrices
>
> mymatrix <- matrix(
+ c(1, 1, 5, 1,
+ 2, 1, 4, 1,
+ 2, 2, 4, 3,
+ 3, 1,NA, 3,
+ 4, 5, 2, 4,
+ 5, 4, 5, 5,
+ 5, 3, 4, 4,
+ 4, 5, 5, 5),
+ nrow = 8,
+ ncol = 4,
+ byrow = TRUE)
> mymatrix
[,1] [,2] [,3] [,4]
[1,] 1 1 5 1
[2,] 2 1 4 1
[3,] 2 2 4 3
[4,] 3 1 NA 3
[5,] 4 5 2 4
[6,] 5 4 5 5
[7,] 5 3 4 4
[8,] 4 5 5 5
>
> mymatrix <- cbind(q1, q2, q3, q4)
> mymatrix
q1 q2 q3 q4
[1,] 1 1 5 1
[2,] 2 1 4 1
[3,] 2 2 4 3
[4,] 3 1 NA 3
[5,] 4 5 2 4
[6,] 5 4 5 5
[7,] 5 3 4 4
[8,] 4 5 5 5
>
> dim(mymatrix)
[1] 8 4
> table(mymatrix)
mymatrix
1 2 3 4 5
6 4 4 8 9
> mean(mymatrix, na.rm = TRUE)
[1] 3.322581
> cor(mymatrix, use = "pairwise")
q1 q2 q3
q1 1.0000000 0.7395179 -0.12500000
q2 0.7395179 1.0000000 -0.27003086
q3 -0.1250000 -0.2700309 1.00000000
q4 0.8804063 0.8506398 -0.02613542
q4
q1 0.88040627
q2 0.85063978
q3 -0.02613542
q4 1.00000000
>
> mydata <- data.frame(workshop, gender, mymatrix)
> mydata
workshop gender q1 q2 q3 q4
1 R Female 1 1 5 1
2 SAS Female 2 1 4 1
3 R Female 2 2 4 3
4 SAS <NA> 3 1 NA 3
5 R Male 4 5 2 4
6 SAS Male 5 4 5 5
7 R Male 5 3 4 4
8 SAS Male 4 5 5 5
>
> # 8.2.5 Arrays
>
> # 8.2.5 Lists
>
> mylist <- list(workshop, gender, q1, q2, q3, q4, mymatrix)
> mylist
[[1]]
[1] R SAS R SAS R SAS R SAS
Levels: R SAS SPSS STATA

[[2]]
[1] Female Female Female <NA> Male
[6] Male Male Male
Levels: Male Female

[[3]]
[1] 1 2 2 3 4 5 5 4

[[4]]
[1] 1 1 2 1 5 4 3 5

[[5]]
[1] 5 4 4 NA 2 5 4 5

[[6]]
[1] 1 1 3 3 4 5 4 5

[[7]]
q1 q2 q3 q4
[1,] 1 1 5 1
[2,] 2 1 4 1
[3,] 2 2 4 3
[4,] 3 1 NA 3
[5,] 4 5 2 4
[6,] 5 4 5 5
[7,] 5 3 4 4
[8,] 4 5 5 5

>
> # 8.3
>
> ls()
[1] "gender" "mydata"
[3] "mylist" "mymatrix"
[5] "mymeansd" "myModel"
[7] "MyModel" "mystat1"
[9] "mystat2" "mystat3"
[11] "mystat4" "myStatlist"
[13] "myvar" "q1"
[15] "q2" "q3"
[17] "q4" "workshop"
[19] "x" "y"
> objects()
[1] "gender" "mydata"
[3] "mylist" "mymatrix"
[5] "mymeansd" "myModel"
[7] "MyModel" "mystat1"
[9] "mystat2" "mystat3"
[11] "mystat4" "myStatlist"
[13] "myvar" "q1"
[15] "q2" "q3"
[17] "q4" "workshop"
[19] "x" "y"
>
> rm(x, y, workshop, gender, q1, q2, q3, q4)
> ls()
[1] "mydata" "mylist"
[3] "mymatrix" "mymeansd"
[5] "myModel" "MyModel"
[7] "mystat1" "mystat2"
[9] "mystat3" "mystat4"
[11] "myStatlist" "myvar"
>
> getwd()
[1] "c:/temp"
> setwd("c:/temp")
> getwd()
[1] "c:/temp"
>
> save.image(file = "myWorkspace.RData")
>
> load("C:\\Temp\\myWorkspace.RData")
> ls()
[1] "mydata" "mylist"
[3] "mymatrix" "mymeansd"
[5] "myModel" "MyModel"
[7] "mystat1" "mystat2"
[9] "mystat3" "mystat4"
[11] "myStatlist" "myvar"
>
> # 8.4 Comments to Document Your Programs
>
> # 8.5 Controlling Functions(Procedures)
>
> # 8.5.1 Controlling Functions with Arguments
>
> # 8.5.2 Controlling Functions with Formulas
>
> # 8.5.3 Controlling Functions with Object's Calss
>
> workshop <- c(1,2,1,2,1,2,1,2)
> mode(workshop)
[1] "numeric"
> class(workshop)
[1] "numeric"
> summary(workshop)
Min. 1st Qu. Median Mean 3rd Qu.
1.0 1.0 1.5 1.5 2.0
Max.
2.0
>
> workshop <- factor(workshop,
+ levels = c(1,2,3,4),
+ labels = c("R","SAS","SPSS","STATA"))
> mode(workshop)
[1] "numeric"
> class(workshop)
[1] "factor"
> summary(workshop)
R SAS SPSS STATA
4 4 0 0
>
> methods(summary)
[1] summary.aov
[2] summary.aovlist
[3] summary.aspell*
[4] summary.connection
[5] summary.data.frame
[6] summary.Date
[7] summary.default
[8] summary.ecdf*
[9] summary.factor
[10] summary.glm
[11] summary.infl
[12] summary.lm
[13] summary.loess*
[14] summary.manova
[15] summary.matrix
[16] summary.mlm
[17] summary.nls*
[18] summary.packageStatus*
[19] summary.POSIXct
[20] summary.POSIXlt
[21] summary.ppr*
[22] summary.prcomp*
[23] summary.princomp*
[24] summary.srcfile
[25] summary.srcref
[26] summary.stepfun
[27] summary.stl*
[28] summary.table
[29] summary.tukeysmooth*

Non-visible functions are asterisked
>
> # 8.5.4 Controlling Functions with Extractor Functions - ODS, OMS
>
> myModel <- lm(q4 ~ q1 + q2 + q3, data = mydata)
> class(myModel)
[1] "lm"
> summary(myModel)

Call:
lm(formula = q4 ~ q1 + q2 + q3, data = mydata)

Residuals:
1 2 3 5
-0.31139 -0.42616 0.94283 -0.17975
6 7 8
0.07658 0.02257 -0.12468

Coefficients:
Estimate Std. Error t value
(Intercept) -1.3243 1.2877 -1.028
q1 0.4297 0.2623 1.638
q2 0.6310 0.2503 2.521
q3 0.3150 0.2557 1.232
Pr(>|t|)
(Intercept) 0.379
q1 0.200
q2 0.086 .
q3 0.306
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.6382 on 3 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.9299, Adjusted R-squared: 0.8598
F-statistic: 13.27 on 3 and 3 DF, p-value: 0.03084

> anova(myModel)
Analysis of Variance Table

Response: q4
Df Sum Sq Mean Sq F value
q1 1 13.4934 13.4934 33.1335
q2 1 2.0955 2.0955 5.1456
q3 1 0.6180 0.6180 1.5174
Residuals 3 1.2217 0.4072
Pr(>F)
q1 0.01042 *
q2 0.10809
q3 0.30576
Residuals
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> plot(myModel)
페이지 변경을 확인하기 위해 기다리는 중...
페이지 변경을 확인하기 위해 기다리는 중...
페이지 변경을 확인하기 위해 기다리는 중...
페이지 변경을 확인하기 위해 기다리는 중...
> predict(myModel)
1 2 3 5
1.311392 1.426160 2.057173 4.179747
6 7 8
4.923418 3.977426 5.124684
> resid(myModel)
1 2 3
-0.31139241 -0.42616034 0.94282700
5 6 7
-0.17974684 0.07658228 0.02257384
8
-0.12468354
>
> # 8.5.5 How Much Output Is There?
> print(myModel)

Call:
lm(formula = q4 ~ q1 + q2 + q3, data = mydata)

Coefficients:
(Intercept) q1 q2
-1.3243 0.4297 0.6310
q3
0.3150

> mode(myModel)
[1] "list"
> class(myModel)
[1] "lm"
> names(myModel)
[1] "coefficients" "residuals"
[3] "effects" "rank"
[5] "fitted.values" "assign"
[7] "qr" "df.residual"
[9] "na.action" "xlevels"
[11] "call" "terms"
[13] "model"
> print(unclass(myModel))
$coefficients
(Intercept) q1 q2
-1.3242616 0.4297468 0.6310127
q3
0.3149789

$residuals
1 2 3
-0.31139241 -0.42616034 0.94282700
5 6 7
-0.17974684 0.07658228 0.02257384
8
-0.12468354

$effects
(Intercept) q1 q2
-8.6931829 3.6733345 -1.4475844
q3
0.7861009 0.2801541 0.7929917

-0.7172223

$rank
[1] 4

$fitted.values
1 2 3 5
1.311392 1.426160 2.057173 4.179747
6 7 8
4.923418 3.977426 5.124684

$assign
[1] 0 1 2 3

$qr
$qr
(Intercept) q1 q2
1 -2.6457513 -8.6931829 -7.9372539
2 0.3779645 3.9279220 3.3096380
3 0.3779645 0.1677124 -2.6544861
5 0.3779645 -0.3414626 0.4356232
6 0.3779645 -0.5960502 -0.3321400
7 0.3779645 -0.5960502 -0.7088608
8 0.3779645 -0.3414626 0.4356232
q3
1 -10.9609697
2 -0.3273268
3 0.7220481
5 2.4957256
6 -0.1051645
7 0.4471879
8 -0.4186885
attr(,"assign")
[1] 0 1 2 3

$qraux
[1] 1.377964 1.167712 1.087546 1.783367

$pivot
[1] 1 2 3 4

$tol
[1] 1e-07

$rank
[1] 4

attr(,"class")
[1] "qr"

$df.residual
[1] 3

$na.action
4
4
attr(,"class")
[1] "omit"

$xlevels
named list()

$call
lm(formula = q4 ~ q1 + q2 + q3, data = mydata)

$terms
q4 ~ q1 + q2 + q3
attr(,"variables")
list(q4, q1, q2, q3)
attr(,"factors")
q1 q2 q3
q4 0 0 0
q1 1 0 0
q2 0 1 0
q3 0 0 1
attr(,"term.labels")
[1] "q1" "q2" "q3"
attr(,"order")
[1] 1 1 1
attr(,"intercept")
[1] 1
attr(,"response")
[1] 1
attr(,".Environment")
<environment: R_GlobalEnv>
attr(,"predvars")
list(q4, q1, q2, q3)
attr(,"dataClasses")
q4 q1 q2 q3
"numeric" "numeric" "numeric" "numeric"

$model
q4 q1 q2 q3
1 1 1 1 5
2 1 2 1 4
3 3 2 2 4
5 4 4 5 2
6 5 5 4 5
7 4 5 3 4
8 5 4 5 5

> myModel$coefficients
(Intercept) q1 q2
-1.3242616 0.4297468 0.6310127
q3
0.3149789
> class(myModel$coefficients)
[1] "numeric"
> barplot(myModel$coefficients)
>
> # 8.5.6 Writing Your Own Functions(Macros)
>
> myvar <- c(1:5)
>
> # A bad function
> mystat1 <- function(x)
+ {
+ mean(x, na.rm = TRUE)
+ sd(x, na.rm = TRUE)
+ }
> mystat1(myvar)
[1] 1.581139
>
> mystat2 <- function(x)
+ {
+ print(mean(x, na.rm = TRUE))
+ print(sd(x, na.rm = TRUE))
+ }
> mystat2(myvar)
[1] 3
[1] 1.581139
>
> mystat3 <- function(x)
+ {
+ mymean <- mean(x, na.rm = TRUE)
+ mysd <- sd(x, na.rm = TRUE)
+ c(mean=mymean, sd=mysd)
+ }
> mystat3(myvar)
mean sd
3.000000 1.581139
> mymeansd <- mystat3(myvar)
> mymeansd
mean sd
3.000000 1.581139
>
> mystat4 <- function(x)
+ {
+ myinput <- x
+ mymean <- mean(x, na.rm = TRUE)
+ mysd <- sd(x, na.rm = TRUE)
+ list(data=myinput, mean=mymean, sd=mysd)
+ }
> mystat4(myvar)
$data
[1] 1 2 3 4 5

$mean
[1] 3

$sd
[1] 1.581139

> myStatlist <- mystat4(myvar)
> myStatlist$data
[1] 1 2 3 4 5
>
> mystat4
function(x)
{
myinput <- x
mymean <- mean(x, na.rm = TRUE)
mysd <- sd(x, na.rm = TRUE)
list(data=myinput, mean=mymean, sd=mysd)
}
>

1291628492_R_for_SAS_and_SPSS_Users_08.R

+ Recent posts