Many problems, such as some in Philosophy, are difficult because it is hard to state them clearly. A powerful language system improves people’s ability to solve complicated problems.
R is almost a statistics language. Sometimes it helps to think in R commands. For example, pnorm(2.5, 2, 4)
, qt(.975, 20)
is more intuitive than mathematical notations. And by
, *ply
functions will help to think about matrix computations.
It is a good idea to melt programming language and mathematical language together. Sentences, or code can help to understand and can be run at the same time. This requires a programming language to be very expressive. R is far from enough.
I want R to support dat[x1==1, ]
. It’s better than dat[dat$x1==1, ]
. And also I hope I can use |
as conditioning, for example mean(y|x)
where x
is a category vector. I don’t know how to implement this two functions in R.
There is no sum of squares function in R. In linear model, this is the most basic function. So I write a few piece of codes to make life easier, such as functions to calculate MS(y|x) = [E(y|x) - E(y)] ^ 2
.
In the following code, MS(y|x)
is ss(project(y, x)) / (nleves(x) - 1)
.
#compute sum of squares
ss=function(x, na.rm=FALSE){
sum((x - mean(x)) ^ 2, na.rm=na.rm)
}
# Compute the projection of y given x. Currently y can only be numeric.
# Note: When calculating the ss for interaction terms, we need to remove the contribution of linear parts.
project=function(y, x){
if(!is.numeric(y))
print("sorry, method for project factors is still under developing")
if(is.character(x))
x <- as.factor(x)
if(is.list(x)){
x=interaction(x, sep="")
}
if(is.factor(x)){
projected.values <- tapply(y, x, mean)
projection <- x
levels(projection) <- projected.values
projection <- as.numeric(as.character(projection))
return(projection)
}
if(is.numeric(x)){
x = as.matrix(x)
y = as.matrix(y)
return(x %*% solve(crossprod(x)) %*% t(x) %*% y)
}
}