[R] Problem running stepAIC within a function.

uzuria winging_it at hotmail.com
Sat Mar 3 15:23:41 CET 2012


Hi

I need to a function that automatically fits a regression to data, using the
stepAIC. I've ran the code manually and it works fine. However, when I run
the function on the same data, the following error occurs:

Problem in regimp(fullsim = simt, fullsim1 = simt1,..: Length of (weights)
(variable 4) is 4271 != length of others (4278) 

I got the function to output the length of the dataset and weights, which
were both 4271.

When I remove "weights=w" from the code. StepAIC start's running, but then I
get the following error:

Problem in stepAIC(lm(new ~ -1 + SIC3 + emp, data =..: number of rows in use
has changed: remove missing values? 

I checked the data for missing values and there are none. 

I can't understand why the code works fine on it's own, but not in a
function. 

--------------------------------


#Mean imp and results
regimp <-
function(fullsim,fullsim1,fullsim2,reps=75,opt=0,rand=0,weight=0,match=0){
	results <-
data.frame(RIB=rep(0,reps),ARIB=rep(0,reps),Conf=rep(0,reps),Dks=rep(0,reps),PL=rep(0,reps),REL=rep(0,reps),VARS=rep(0,reps))
	#run simulations of missing data and impute on each
	#do reps
	for (j in 1:reps){
		#bind data
		alldata <- cbind(fullsim,fullsim1,fullsim2)
		cols <- paste(names(alldata),c(rep("",16),rep(1,16),rep(2,16)),sep="")
		names(alldata) <- cols
		alldata <- alldata[,-c(3,17:21,33:37)]
		#create missing values
		missings <- createmiss(alldata)
		simmiss <- missings$missdata
		#sample of complete data
		s1 <- missings$samp
		s1$SIC <- factor(s1$SIC)
		s1$SIC3 <- factor(s1$SIC3)
		s1$emp <- factor(s1$emp)
		newfull <- rep(0,5120)
		#set weighting
		if (weight==1){w <- s1$weight/sum(s1$weight)}
		else {w <- rep(1/nrow(s1),nrow(s1))}
		#do regression
		if (opt==1){
			fit <-
lm(stepAIC(lm(new~-1+SIC,s1,weights=w),scope=list(upper=~1+SIC+turn+exturn+new+exnew+hand+excise+merch+exmerch+tob+rub+water+turn1+exturn1+new1+exnew1+hand1+excise1+
			
merch1+exmerch1+tob1+rub1+water1+turn2+exturn2+new2+exnew2+hand2+excise2+merch2+exmerch2+tob2+rub2+water2,lower=~-1+SIC),
				direction="both"))
			sigdata <-
cbind(new=s1$new,SIC=s1$SIC,s1[,coeffs[which(summary(fit)$coeff[-c(1:128),4]
<= 0.05)]])
			finalfit <- lm(new~.-1,data=sigdata,weights=w)
		}
		else {
			fit <-
lm(stepAIC(lm(new~-1+SIC3+emp,data=s1),scope=list(upper=~1+SIC3+emp+turn+exturn+new+exnew+hand+excise+merch+exmerch+tob+rub+water+turn1+exturn1+new1+exnew1+
			
hand1+excise1+merch1+exmerch1+tob1+rub1+water1+turn2+exturn2+new2+exnew2+hand2+excise2+merch2+exmerch2+tob2+rub2+water2,lower=~-1+SIC3+emp),
				direction="both"))
			sigdata <-
cbind(new=s1$new,SIC3=s1$SIC3,emp=s1$emp,s1[,coeffs[which(summary(fit)$coeff[-c(1:70),4]
<= 0.05)]])
			finalfit <- lm(new~.-1,data=sigdata,weights=w)
		}		
...

--
View this message in context: http://r.789695.n4.nabble.com/Problem-running-stepAIC-within-a-function-tp4441487p4441487.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list